[英]Error out shell script if plsql program fails
在shell腳本中,我正在調用PLSQL存儲過程
sqlplus -s <
但是,當plsql塊中有錯誤時,我需要將shell腳本錯誤化,該腳本正在oracle中作為主機並發程序運行,但事實並非如此。
我是Shell腳本的新手,任何幫助都非常感謝。
在您的SQL腳本中使用WHENEVER SQLERROR EXIT N
怎么樣? 這會將N返回到您的Shell腳本。
文檔在這里 。
不幸的是,沒有簡單,容易的方法可以做到這一點。 無論基礎PL / SQL命令的狀態如何,SQLPLUS大多都會返回成功(0)。 即使使用“ WHENEVER SQLERROR EXIT”也不會將該錯誤數字狀態傳遞回調用外殼程序。
SQLPLUS返回0,因為它能夠成功執行命令。
但是,我已經找到一種解決方法,但是您需要從sql會話中創建日志文件,然后grep出錯誤。
sqlplus -s /nolog <<EOD >> ${sql_local_output_file}
....
PROCEDURE error( p_msg VARCHAR2 ) IS
BEGIN
DECLARE
error_date VARCHAR2(20);
BEGIN
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') INTO error_date FROM DUAL;
dbms_output.put_line( '[' || error_date || ']: ERROR ' || p_msg );
END;
END error;
....
EOD
if (grep -q -e "ERROR" ${sql_local_output_file}); then
logInfo "Error found in sql script, ( ${sh_script} )."
fi
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.