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;