oracle的exit、return、continue
1.先看exit
和return
將exit
或是 return
用在loop 。。。。end loop;
中都可以中斷迴圈,但是它們有一個很明顯的不同
看下面兩個例子:
例一:
CREATE OR replace PACKAGE BODY cux_test
IS
PROCEDURE Main
IS
l_count NUMBER;
l_test NUMBER := 6;
BEGIN
dbms_output.Put_line('開始迴圈');
FOR l_count IN 1..10 LOOP
IF l_test = l_count THEN
dbms_output.Put_line('滿足條件,退出迴圈');
RETURN;
ELSE
dbms_output.Put_line('繼續迴圈');
END IF;
END LOOP;
dbms_output.Put_line('結束程式');
END;
END cux_test;
例二:
CREATE OR replace PACKAGE BODY cux_test
IS
PROCEDURE Main
IS
l_count NUMBER;
l_test NUMBER := 6;
BEGIN
dbms_output.Put_line('開始迴圈');
FOR l_count IN 1..10 LOOP
IF l_test = l_count THEN
dbms_output.Put_line('滿足條件,退出迴圈');
exit; --exit when x>=8;可以加條件
ELSE
dbms_output.Put_line('繼續迴圈');
END IF;
END LOOP;
dbms_output.Put_line('結束程式');
END;
END cux_test;
下面來看以上兩個例子的執行結果:
例一:
開始迴圈
繼續迴圈
繼續迴圈
繼續迴圈
繼續迴圈
繼續迴圈
滿足條件,退出迴圈
例二:
開始迴圈
繼續迴圈
繼續迴圈
繼續迴圈
繼續迴圈
繼續迴圈
滿足條件,退出迴圈
結束程式
以上的例子說明了一個問題,exit
只是單純的結束迴圈,但還會繼續執行程式包中其他的內容,而return
則是直接中斷整個程式。
2.continue
的作用是終止本次迴圈,開始下一次迴圈,它不是跳出迴圈。
而oracle
資料庫之前卻一直沒有支援continue
語法,直到oracle11g
加入了continue
語法,其功能也是終止本次迴圈,開始下一次迴圈,exit
語法的作用是跳出並結束迴圈。
BEGIN
FOR i IN 1 .. 20 LOOP
IF i < 10 THEN
CONTINUE;
END IF;
dbms_output.Put_line(i);
END LOOP;
END;
結果:
10
11
12
13
14
15
16
17
18
19
20
當i等於1到9的時候,程式執行到continue
,使得當前迴圈停止,開始下一次迴圈,當i等於10的時候,不會執行到continue
,所以從10開始輸出。
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
的下一次迴圈
相關文章
- exit(0)與exit(1)、return的區別
- exit和return的區別
- Break,Continue,Return的區別
- break,continue,return區別
- C++中的return和exit區別C++
- 解析php中die(),exit(),return的區別PHP
- js跳出迴圈的方法區別( break, continue, return ) 及 $.each 的(return true 和 return false)...JSFalse
- jquery中return,break,continue的用法總結jQuery
- return,continue和break之間的區別
- return、break、continue三者區別
- 程式流程的控制 Abort Exit Halt RunError Continue Break SleepError
- JavaScript--分支+迴圈(continue、break、return的區別)JavaScript
- C#中continue、return、break的區別及作用C#
- PLSQL Language Referenc-FOR迴圈-FOR迴圈中的EXIT WHEN和CONTINUE WHENSQL
- 在Java8的foreach()中不能break,如果需要continue時,可以使用returnJava
- js中return、return true、return false的區別JSFalse
- while中的continue和if中的continue的區別While
- await、return 和 return await 的陷阱AI
- fortran continue的用法
- Exit()
- python中 os._exit() 和 sys.exit(), exit(0)的用法和區別Python
- system.exit(0)和system.exit(1)的區別
- return
- php中的continue用法PHP
- exit hookHook
- break,continue,gotoGo
- JavaScript return false的作用JavaScriptFalse
- 'return await promise' 與 'return promise' 這細微的區別AIPromise
- [譯]await VS return VS return awaitAI
- Environment.Exit(0) 、Application.Exit() 、this.Close() 、this.Dispose()的區別APP
- 「Jupyter」UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.UI
- SpringMVC中@RequestMapping註解中的return “redirect:/“;跟return““的用法。SpringMVCAPP
- continue、break與gotoGo
- python中return的用法Python
- 簡談Java中的returnJava
- java 的 return 是指標Java指標
- JavaScript return falseJavaScriptFalse
- System.exit(1);