我是靠谱客的博主 灵巧楼房,最近开发中收集的这篇文章主要介绍oracle 存储过程循环打开游标数据处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2017-07-24 14:12:42

SQL内容:

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

  2. 1000 条提交一次。

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

pl/sql内容如下:

 1 CREATE OR REPLACE PROCEDURE P_MDF_TEST ( branchno1 in varchar )
 2 AS
 3
cursor cur_inst is select plcno from t1test where
 4
branch in (
select branchcode from t_test start with branchcode =branchno1 connect by prior branchcode = supercode )
 5
and primprdcode in ( '123', '234')
 6
and ( InsExprtDate <> date '9999-12-31'
or
InsExprtDate is null );
 7
record cur_inst%rowtype;
 8
i_count int;
 9
iFlag int ;
10
--
v_end varchar2(30);
时间
11 BEGIN
12
dbms_output.put_line('开始执行');
13
iFlag :=1;
14 
loop
15
if iFlag = 0 then
16
exit;
17
end if;
18
i_count:=0;
19
open cur_inst;
20
if cur_inst%isopen
then
21 
loop
22
fetch cur_inst into record;
23
if
cur_inst%notfound
then
24
iFlag:=0;
25
exit;
26
end if ;
27
update t1test set InsExprtDate =date '9999-12-31' where plcno=record.plcno;
28
update t2test set InsExprtDate =date '9999-12-31' where plcno=record.plcno;
29
--
dbms_output.put_line(record.plcno);
30
i_count := i_count + 1;
31
if i_count >=1000 then
32
--
dbms_output.put_line(i_count);
33
--
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') into v_end from dual;
34
--
dbms_output.put_line(v_end);
35
i_count:=0;
36
commit;
37
end if ;
38
if cur_inst%ROWCOUNT >=100000
then
39
--
dbms_output.put_line('进来了');
40
-- dbms_output.put_line(cur_inst%ROWCOUNT);
41
exit ;
42
end if ;
43
end loop;
44
commit;
45
close cur_inst;
46
end if;
47
end loop;
48
dbms_output.put_line('执行结束');
49 END;

 

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

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

 

转载于:https://www.cnblogs.com/yueers/p/7228629.html

最后

以上就是灵巧楼房为你收集整理的oracle 存储过程循环打开游标数据处理的全部内容,希望文章能够帮你解决oracle 存储过程循环打开游标数据处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部