如何使 Oracle sqlplus 命令行实用程序成为非交互式的?
How to make Oracle sqlplus command line utility non-interactive?
我在 bash 脚本中调用 sqlplus
,提供了一些参数,但可能存在某些参数不正确的情况,例如用户名。在这种情况下 sqlplus
会报告用户名或密码无效的错误,并提示用户输入用户名。不需要该提示。我希望 sqlplus
只在 stderr 上报告错误,退出并使用错误代码退出。完全非交互地执行。
例如,bash 脚本这样调用 sqlplus
:
sqlplus $username/$password@ORCLPDB1 @script.sql
如果$username
变量不正确(比如这样的用户不存在),它会报告错误并一直等待用户输入新的用户名到stdin。 sqlplus
是否有任何错误立即退出的功能,而不提示任何内容?如果没有,是否有任何简单直接的解决方法?
有一个 -s 标志可以停止任何输入提示。
这里有更多详细信息:
看起来如果 sqlplus 将其所有命令通过管道传输到其标准输入中,它实际上不会提示用户输入任何内容,无论是否提供 -S
标志。同样在这种情况下, @script.sql
参数似乎被忽略了(如果作为命令行参数给出,它不会被执行)。因此,要执行脚本以便没有提示和错误使 sqlplus 实际上以错误代码退出,您必须这样调用 sqlplus:
sqlplus /nolog <<EOF
whenever sqlerror exit sql.sqlcode
connect $username/$password @ORCLPDB1
@script.sql
EOF
$?
变量在出错时填充,但错误代码本身对我来说意义不大。它不是指 ORA-XXXXX
方案中的数字。
sqlplus -L $username/$password@ORCLPDB1 @script.sql 应该可以。
-L 选项确保 sqlplus 不会提示输入无效的用户名 and/or 密码并且能够从 shell.
退出
我在 bash 脚本中调用 sqlplus
,提供了一些参数,但可能存在某些参数不正确的情况,例如用户名。在这种情况下 sqlplus
会报告用户名或密码无效的错误,并提示用户输入用户名。不需要该提示。我希望 sqlplus
只在 stderr 上报告错误,退出并使用错误代码退出。完全非交互地执行。
例如,bash 脚本这样调用 sqlplus
:
sqlplus $username/$password@ORCLPDB1 @script.sql
如果$username
变量不正确(比如这样的用户不存在),它会报告错误并一直等待用户输入新的用户名到stdin。 sqlplus
是否有任何错误立即退出的功能,而不提示任何内容?如果没有,是否有任何简单直接的解决方法?
有一个 -s 标志可以停止任何输入提示。
这里有更多详细信息:
看起来如果 sqlplus 将其所有命令通过管道传输到其标准输入中,它实际上不会提示用户输入任何内容,无论是否提供 -S
标志。同样在这种情况下, @script.sql
参数似乎被忽略了(如果作为命令行参数给出,它不会被执行)。因此,要执行脚本以便没有提示和错误使 sqlplus 实际上以错误代码退出,您必须这样调用 sqlplus:
sqlplus /nolog <<EOF
whenever sqlerror exit sql.sqlcode
connect $username/$password @ORCLPDB1
@script.sql
EOF
$?
变量在出错时填充,但错误代码本身对我来说意义不大。它不是指 ORA-XXXXX
方案中的数字。
sqlplus -L $username/$password@ORCLPDB1 @script.sql 应该可以。 -L 选项确保 sqlplus 不会提示输入无效的用户名 and/or 密码并且能够从 shell.
退出