如果plsql程序失败,则会出错shell脚本

时间:2013-09-30 18:24:17

标签: oracle shell unix ksh

在shell脚本中,我正在调用PLSQL存储过程

sqlplus -s<

但是当plsql块出现错误时,我需要在oracle中错误地运行作为主机并发程序运行的shell脚本,但它没有这样做。

我是shell脚本的新手,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如何在SQL脚本中使用WHENEVER SQLERROR EXIT N?这会将N返回给您的shell脚本。

文档here

答案 1 :(得分:0)

不幸的是,没有简单易行的方法。无论底层PL / SQL命令的状态如何,SQLPLUS主要返回成功(0)。即使使用'WHENEVER SQLERROR EXIT'也不会将该错误数字状态传递回调用shell。

SQLPLUS返回0,因为它能够成功执行命令。

但是,我已经找到了解决此问题的方法,但您需要从sql会话中创建一个日志文件,然后将错误输出。

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