oracle 存储过程循环打开游标数据处理

时间:2025-04-25 16:36:27

2017-07-24 14:12:42

SQL内容:

  1.一次性检索 100000 条数据。

  2. 1000 条提交一次。

  3.超过 100000 万条,重新打开游标,重新检索。

pl/sql内容如下:

 CREATE OR REPLACE PROCEDURE P_MDF_TEST ( branchno1 in varchar )
AS
cursor cur_inst is select plcno from t1test where
branch in ( select branchcode from t_test start with branchcode =branchno1 connect by prior branchcode = supercode )
and primprdcode in ( '', '')
and ( InsExprtDate <> date '9999-12-31' or InsExprtDate is null );
record cur_inst%rowtype;
i_count int;
iFlag int ;
-- v_end varchar2(30); 时间
BEGIN
dbms_output.put_line('开始执行');
iFlag :=1;
loop
if iFlag = 0 then
exit;
end if;
i_count:=0;
open cur_inst;
if cur_inst%isopen then
loop
fetch cur_inst into record;
if cur_inst%notfound then
iFlag:=0;
exit;
end if ;
update t1test set InsExprtDate =date '9999-12-31' where plcno=record.plcno;
update t2test set InsExprtDate =date '9999-12-31' where plcno=record.plcno;
-- dbms_output.put_line(record.plcno);
i_count := i_count + 1;
if i_count >=1000 then
-- dbms_output.put_line(i_count);
-- select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') into v_end from dual;
-- dbms_output.put_line(v_end);
i_count:=0;
commit;
end if ;
if cur_inst%ROWCOUNT >=100000 then
-- dbms_output.put_line('进来了');
-- dbms_output.put_line(cur_inst%ROWCOUNT);
exit ;
end if ;
end loop;
commit;
close cur_inst;
end if;
end loop;
dbms_output.put_line('执行结束');
END;

新建测试窗口,执行以下内容:

begin
-- Call the procedure
p_mdf_test(branchno1 => '');
end;