Oracle 存儲(chǔ)過(guò)程 procedure不允許使用 return 語(yǔ)句的解決方案
Oracle存儲(chǔ)過(guò)程中RETURN語(yǔ)句的使用存在嚴(yán)格限制:在存儲(chǔ)過(guò)程(PROCEDURE)中不允許使用RETURN語(yǔ)句,否則會(huì)引發(fā)PLS-00372編譯錯(cuò)誤;而在函數(shù)(FUNCTION)中則必須使用RETURN并返回指定值。
如需在存儲(chǔ)過(guò)程中實(shí)現(xiàn)提前退出功能,建議采用GOTO跳轉(zhuǎn)、條件判斷或異常處理等替代方案。
這一設(shè)計(jì)差異反映了Oracle對(duì)存儲(chǔ)過(guò)程和函數(shù)的不同定位,函數(shù)必須返回值而存儲(chǔ)過(guò)程側(cè)重執(zhí)行操作,開發(fā)者需特別注意語(yǔ)法規(guī)范以避免錯(cuò)誤。
在 Oracle 存儲(chǔ)過(guò)程中,RETURN 語(yǔ)句的行為取決于具體上下文。
1. 在存儲(chǔ)過(guò)程(PROCEDURE)中
RETURN 會(huì)被忽略(或說(shuō)不允許使用)
CREATE OR REPLACE PROCEDURE test_proc AS
BEGIN
RETURN; -- ? 編譯錯(cuò)誤
DBMS_OUTPUT.PUT_LINE('不會(huì)執(zhí)行');
END;錯(cuò)誤信息:PLS-00372: RETURN statement is not allowed in a procedure
2. 在函數(shù)(FUNCTION)中
RETURN 必須使用,且必須有返回值
CREATE OR REPLACE FUNCTION test_func RETURN VARCHAR2 AS
BEGIN
RETURN 'success'; -- ? 必須且有效
END;3. 在存儲(chǔ)過(guò)程的匿名塊或異常處理中
CREATE OR REPLACE PROCEDURE test_proc AS
BEGIN
FOR i IN 1..10 LOOP
IF i = 5 THEN
RETURN; -- ? 仍然非法
END IF;
END LOOP;
END;4. 特殊情況:在自治事務(wù)中?
也不行,語(yǔ)法層面就不允許在 PROCEDURE 中使用 RETURN。
總結(jié)
| 對(duì)象類型 | RETURN 是否有效 | 說(shuō)明 |
|---|---|---|
| PROCEDURE | ? 不允許使用,編譯報(bào)錯(cuò) | 想提前退出?使用 GOTO 或 EXIT 或條件判斷 |
| FUNCTION | ? 必須使用,并返回值 | 正確用法 |
| PACKAGE 中的 PROCEDURE | ? 同普通 PROCEDURE | 不允許 |
如果你想在存儲(chǔ)過(guò)程中實(shí)現(xiàn)“提前退出”效果,可以使用:
GOTO跳轉(zhuǎn)到結(jié)束標(biāo)簽RETURN不能在 PROCEDURE 中使用(和 C/Java 完全不同!)- 直接用
IF...THEN...ELSE控制邏輯流程
到此這篇關(guān)于Oracle 存儲(chǔ)過(guò)程 procedure不允許使用 return 語(yǔ)句的解決方案的文章就介紹到這了,更多相關(guān)oracle 存儲(chǔ)過(guò)程 procedure return 語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用sqlplus命令行工具為oracle創(chuàng)建用戶和表空間
這篇文章主要介紹了使用sqlplus為oracle創(chuàng)建用戶和表空間的方法,本文介紹的是使用Oracle 9i所帶的命令行工具:SQLPLUS,需要的朋友可以參考下2017-11-11
oracle 數(shù)據(jù)庫(kù)閃回相關(guān)語(yǔ)句介紹
本文將詳細(xì)介紹oracle 數(shù)據(jù)庫(kù)閃回相關(guān)語(yǔ)句,需要了解跟多的朋友可以參考下2012-11-11
oracle數(shù)據(jù)排序后獲取前幾行數(shù)據(jù)的寫法(rownum、fetch方式)
項(xiàng)目中用到Oracle分組查詢?nèi)∶拷M排序后的前N條記錄,group?by?只能返回每個(gè)組的單條統(tǒng)計(jì),下面這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)排序后獲取前幾行數(shù)據(jù)的寫法(rownum、fetch方式),需要的朋友可以參考下2022-12-12
使用sqlplus連接Oracle數(shù)據(jù)庫(kù)問(wèn)題
這篇文章主要介紹了使用sqlplus連接Oracle數(shù)據(jù)庫(kù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
詳細(xì)聊聊Oracle表碎片對(duì)性能有多大的影響
當(dāng)針對(duì)一個(gè)表的刪除操作很多時(shí),表會(huì)產(chǎn)生大量碎片,下面這篇文章主要給大家介紹了關(guān)于Oracle表碎片對(duì)性能影響的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03
Oracle數(shù)據(jù)泵實(shí)現(xiàn)不同用戶導(dǎo)入導(dǎo)出表級(jí)
這篇文章主要介紹了Oracle數(shù)據(jù)泵實(shí)現(xiàn)不同用戶導(dǎo)入導(dǎo)出表級(jí),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07

