Oracle游标
解决问题:之前结存量中间表WMSBEGINNINGDATELIN使用BEGD_DAT来区分会计期间,不是非常合理,改为使用CLD_NO。但是WMSBEGINNINGDATELIN表的CLD_NO字段最初没有插入维护,所以需要对历史数据做批量维护。
---------------------结存量中间表补全CLD_NO脚本-----------------------
--1.备份表
create table t_20180316_WMSBEGINNINGDATELIN as select * from WMSBEGINNINGDATELIN;
--2.查看临时表备份
select * from t_20180316_WMSBEGINNINGDATELIN ;
--3.创建临时表记录要修改的结果集
create table t_20180316_temp as select CLD_NO,CLDPRD_MON from WMSCLDMST
--4.批量执行插入
declare v_cld_no WMSBEGINNINGDATELIN.CLD_NO%type; v_begd_dat WMSBEGINNINGDATELIN.BEGD_DAT%type; v_i number; cursor cur is select CLD_NO,CLDPRD_MON from t_20180316_temp; begin open cur; loop fetch cur into v_cld_no,v_begd_dat; exit when cur %notfound; update WMSBEGINNINGDATELIN set CLD_NO = v_cld_no where BEGD_DAT = v_begd_dat; v_i := v_i+1; if v_i>=500 then commit; end if; end loop; close cur; exception when others then dbms_output.put_line('error!'); end;
注意:t_20180316_WMSBEGINNINGDATELIN、t_20180316_temp 两个属于临时备份表,‘4.批量执行插入’语句执行后,要将临时表备份表drop掉。