【问题标题】:How to make Oracle sqlplus command line utility non-interactive?如何使 Oracle sqlplus 命令行实用程序非交互式?
【发布时间】:2022-03-09 15:19:19
【问题描述】:

我从 bash 脚本中调用 sqlplus,提供了一些参数,但可能存在某些参数不正确的情况,例如用户名。此时sqlplus报错用户名或密码无效,提示用户输入用户名。该提示是不希望的。我希望sqlplus 只报告 stderr 上的错误,退出并使用错误代码退出。完全以非交互方式执行。

例如,bash 脚本像这样调用sqlplus

sqlplus $username/$password@ORCLPDB1 @script.sql

如果$username 变量不正确(像这样的用户不存在),它会报告错误并继续等待用户输入新的用户名到标准输入。 sqlplus 是否有任何功能可以在出错时立即退出,而不提示任何内容?如果没有,是否有任何简单直接的解决方法?

【问题讨论】:

    标签: bash oracle sqlplus


    【解决方案1】:

    有一个 -s 标志可以停止任何输入提示。

    更多细节在这里:

    http://www.dbatoolz.com/t/sqlplus-s-shell-scripting.html

    【讨论】:

    • 似乎并非如此。它只是隐藏了提示消息,但一直期待一些输入,因此停滞不前。
    • 所以你使用了 sqlplus -s $username/$password@ORCLPDB1 @script.sql?
    • 是的。 [Stack Overflow 希望消息更长,所以现在更长]
    • 如示例中的 Heredoc (
    • 解决了,感谢您的启发!不确定这是否是最好的解决方案,但似乎适用于我的情况。
    【解决方案2】:

    看起来如果 sqlplus 将其所有命令通过管道传输到其标准输入中,它实际上不会提示用户输入任何内容,无论是否提供了 -S 标志。同样在这种情况下,@script.sql 参数似乎被忽略(如果作为命令行参数给出,它不会被执行)。所以,要执行一个脚本,使没有提示和错误,使 sqlplus 实际上以错误代码退出,你必须像这样调用 sqlplus:

    sqlplus /nolog <<EOF
    whenever sqlerror exit sql.sqlcode
    connect $username/$password @ORCLPDB1
    @script.sql
    EOF
    

    $? 变量在错误时填充,但错误代码本身对我来说没有多大意义。它不是指ORA-XXXXX方案中的数字。

    【讨论】:

      【解决方案3】:

      sqlplus -L $username/$password@ORCLPDB1 @script.sql 应该可以工作。 -L 选项确保 sqlplus 不会提示输入无效的用户名和/或密码,并且能够从 shell 中退出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多