2010-02-12 15 views
2

我有一個存儲過程,它有一個OUT參數,表示一個錯誤代碼。 如果錯誤代碼不爲0,那麼我提出一個錯誤SQL * Plus:強制它返回一個錯誤代碼

DECLARE 
BEGIN 
foo (err_code); 

IF (err_code <> 0) THEN 
    raise_application_error(...); 

END; 

到目前爲止好,但這裏是我的問題。

這段代碼(如上所示)由sqlplus執行,它由shell腳本調用,它應該以0 /不爲0(作爲sql腳本)退出。

#shell script 

sqlplus ... @myscript 
return $? 

當raise_application_error執行時,控制權返回到sqlplus。

sql> 

我想要什麼,是退出回外殼,沒有返回的sqlplus上$ 0的方式嗎?

有什麼想法? 在此先感謝。

回答

7
+0

謝謝,正是我需要的。 – Tom 2010-02-12 21:08:36

+0

我們在'sqlerror退出sql.sqlcode'的時候做'',它將更多的信息傳回給腳本的調用者。如果SQLPlus跳過某種操作系統級別的錯誤,我們也會'每當出現oserror exit 1'。 – 2011-11-15 18:09:25

0

如果你關心你的PL/SQL引發的應用程序錯誤,你可以聲明的返回碼作爲一個SQL * Plus變量,並返回有PL/SQL程序設置。

#shell script 

sqlplus /nolog << EOF 
connect uid/pw 
variable retval number; 
BEGIN 
    foo (:retval); 
END; 
/

exit retval; 
EOF 

return $? 
相關問題