1. 程式人生 > >Oracle儲存過程中跳出迴圈的寫法

Oracle儲存過程中跳出迴圈的寫法

記錄exitreturn的用法

1:exit用來跳出迴圈

loop
IF V_KBP IS NULL THEN
          EXIT;
   END IF;
end loop;

2:return跳出儲存過程

loop
IF V_KBP IS NULL THEN
        return;
   END IF;
end loop;

3:跳出loop 一次迴圈

oracle 11g已提供continue; oracle 10g及以下,使用goto來替代,例如

SQL> set serveroutput on;
SQL> declare
  2  begin
  3    for
i in 1..10 loop 4 if mod(i,2)=0 then 5 goto next; 6 end if; 7 dbms_output.put_line(i); 8 <<next>> 9 null; 10 end loop; 11 end; 12 /

注意:<<next>>標籤後的null;語句不可少,因為goto標籤後必須緊接著一個執行語句

4:Oracle迴圈中的EXITRETURNCONTINUE解密

注:本文來源於 《 Oracle迴圈中的EXIT

RETURNCONTINUE解密 》

有時候編寫Oracle中用遊標等資訊去迴圈處理邏輯的時候,對EXIT、RETURN、CONTINUE很容易搞混淆,網上搜了資料也不是很清楚,所以本人自己寫了一小段程式碼測試了這三種用法。案例程式碼如下:

PROCEDURE P_TASK IS
  BEGIN
    FOR MY_CU IN (SELECT SPBH, SPMCH FROM FUCM) LOOP
      FOR MY IN (SELECT SPBH, SPMCH FROM FUCM) LOOP
        IF MY_CU.SPBH = 'AAA' THEN
          RETURN
; --exit; --continue; ELSIF MY.SPBH = 'BBB' THEN INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('123', '123'); ELSE INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('222', '222'); END IF; INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('333', '333'); END LOOP; END LOOP; INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('444', '444'); END P_TASK;

案例測試得到結果如下(分析的結果中注意本次迴圈和本迴圈的區別。本次迴圈是本迴圈執行的這次迴圈):

第一種:使用RETURN的時候,直接跳出儲存過程或者函式

第二種:使用EXIT的時候,跳出本迴圈轉而執行本迴圈的上一級迴圈的下一次迴圈。就此案例而言MY_CU.SPBH = 'AAA'為真的時候,直接跳出MY迴圈轉而去執行MY_CU的下一次迴圈

第三種:使用CONTINUE的時候,本次迴圈後面的程式碼部分不再執行,轉而執行本迴圈的下一次迴圈。就此案例而言MY_CU.SPBH = 'AAA'為真的時候,後面的程式碼不執行,繼續MY的下一次迴圈