需求
最近一直在忙于开发新的产品,产品开发完之后,接收到运营通知,说要更换线上的数据,数据量在几十万到百万之间,那如何更新呢?
分析
因为是线上的数据更新,我当时想着先在本地建立一个临时表,上传到临时表,然后把这个临时表给DBA,再用SQL语句做关联就行了。但是当我在本地用Excle导入到临时表的时候,发现很容易出错。 然后联系上DBA,DBA说在线上有我们能操作的库,这个库就是为了临时表的。
处理
所以最后的处理方式就是我在本地生成SQL脚本然后给DBA插入到线上临时表,再做关联即可。用时几分钟就可以了。
=CONCATENATE("insert into TMP_ZHITOU_BASIC (KEYWORD,KEYWORD_YEAR_PRICE,ISSALE,VERSION) values ('",A101182,"',",B101182,",",C101182,",",D101182,");")
ORACLE的关联写法:
DECLARE
pushcount INTEGER := 0;
BEGIN
FOR p IN (select KEYWORD_YEAR_PRICE,VERSION,KEYWORD from MATCH_READ.TMP_ZHITOU_BASIC) LOOP
update xxx v1 SET v1.PUBDATE=SYSDATE,v1.KEYWORD_YEAR_PRICE = p.KEYWORD_YEAR_PRICE WHERE v1.STATE = '0' AND v1.ISSALE = 0 AND v1.VERSION=p.VERSION AND v1.KEYWORD = p.KEYWORD;
END LOOP;
commit;
exception
when others then
rollback;
dbms_output.put_line(sqlerrm);
END;
温馨提示:SQL关联是临时表和线上表做关联的,把临时表的数据更新到线上表
|