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掉。

原文地址:https://www.cnblogs.com/xianfengzhike/p/10239113.html