簡體   English   中英

如果plsql程序失敗,則錯誤輸出shell腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM