【问题标题】:Error out shell script if plsql program fails如果 plsql 程序失败,则错误输出 shell 脚本
【发布时间】:2013-10-06 17:22:41
【问题描述】:

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

sqlplus -s

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

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

【问题讨论】:

标签: oracle shell unix ksh


【解决方案1】:

在您的 SQL 脚本中使用WHENEVER SQLERROR EXIT N 怎么样?这会将 N 返回到您的 shell 脚本。

文档here

【讨论】:

  • 感谢您的回复.. 非常感谢您的时间...我已经使用了它,即使我的 plsql 代码有错误,我的 shell 脚本仍然可以成功完成
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多