Oracle循環中的EXIT、RETURN、CONTINUE解密


有時候編寫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的下一次循環


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM