【问题标题】:SQL*Plus : Force it to return an error codeSQL*Plus : 强制它返回错误代码
【发布时间】:2010-02-14 12:41:38
【问题描述】:

我有一个存储过程,它有一个 OUT 参数,指示错误代码。 如果错误码不是0,那么我会报错

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>

我想要的是一种退出到 shell 的方法,而 sqlplus 不会在 $ 上返回 0?

有什么想法吗? 提前致谢。

【问题讨论】:

    标签: oracle sqlplus exit-code


    【解决方案1】:

    【讨论】:

    • 我们使用whenever sqlerror exit sql.sqlcode,它将更多信息传递给脚本的调用者。我们还使用whenever oserror exit 1 以防 SQLPlus 因某种操作系统级别的错误而绊倒。
    【解决方案2】:

    如果您关心您的 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 $?
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      • 2011-12-04
      • 1970-01-01
      • 2014-07-03
      相关资源
      最近更新 更多