注:本文來源於: 《 Oracle存儲過程中跳出循環的寫法 》
Oracle存儲過程中跳出循環的寫法
記錄exit和return的用法
1:exit用來跳出循環
2:return跳出存儲過程
3:跳出loop 一次循環
oracle 11g已提供continue;
oracle 10g及以下,使用goto來替代,例如1 SQL> set serveroutput on; 2 SQL> declare 3 2 begin 4 3 for i in 1..10 loop 5 4 if mod(i,2)=0 then 6 5 goto next; 7 6 end if; 8 7 dbms_output.put_line(i); 9 8 <<next>> 10 9 null; 11 10 end loop; 12 11 end; 13 12 / 14 注意:<<next>>標簽后的null;語句不可少,因為goto標簽后必須緊接着一個執行語句
4:Oracle循環中的EXIT、RETURN、CONTINUE解密
注:本文來源於 《 Oracle循環中的EXIT、RETURN、CONTINUE解密 》
有時候編寫Oracle中用游標等信息去循環處理邏輯的時候,對EXIT、RETURN、CONTINUE很容易搞混淆,網上搜了資料也不是很清楚,所以本人自己寫了一小段代碼測試了這三種用法。案例代碼如下:
1 PROCEDURE P_TASK IS 2 BEGIN 3 FOR MY_CU IN (SELECT SPBH, SPMCH FROM FUCM) LOOP 4 FOR MY IN (SELECT SPBH, SPMCH FROM FUCM) LOOP 5 IF MY_CU.SPBH = 'AAA' THEN 6 RETURN; 7 --exit; 8 --continue; 9 ELSIF MY.SPBH = 'BBB' THEN 10 INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('123', '123'); 11 ELSE 12 INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('222', '222'); 13 END IF; 14 INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('333', '333'); 15 END LOOP; 16 END LOOP; 17 INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('444', '444'); 18 END P_TASK;案例測試得到結果如下(分析的結果中注意本次循環和本循環的區別。本次循環是本循環執行的這次循環):
第一種:使用RETURN的時候,直接跳出存儲過程或者函數
第二種:使用EXIT的時候,跳出本循環轉而執行本循環的上一級循環的下一次循環。就此案例而言MY_CU.SPBH = 'AAA'為真的時候,直接跳出MY循環轉而去執行MY_CU的下一次循環
第三種:使用CONTINUE的時候,本次循環后面的代碼部分不再執行,轉而執行本循環的下一次循環。就此案例而言MY_CU.SPBH = 'AAA'為真的時候,后面的代碼不執行,繼續MY的下一次循環
————————————————————————————————————————————————————————————————————————————————————————————————
