Oracle sqlplus > 替换一个提示变量

Oracle sqlplus > substitution a prompt variable

我有一个 *.sql 脚本文件,此文件中有一些 PROMPT 命令强制用户输入内容。

我想用 sqlplus 执行这个脚本文件并以某种方式抑制提示问题。

有什么方法可以抑制问题并将其值替换为预定义的变量吗?

这是我的测试代码:

set define on
set define $
SET VERIFY OFF
SET HEADING OFF

DEFINE semaowner = "hello" (CHAR);
accept semaowner prompt "schema owner: "
select '$semaowner' semaowner from dual; 

quit;

以及我执行它的方式:

sqlplus sys/ora123@host:port/schema as sysdba @prompt-demo.sql

但它不起作用,因为出现提示是否应用了 DEFINE 命令。

您可以从命令行提供对提示的响应,如有必要,包裹在 shell script/batch 文件中:

echo schema_name | sqlplus sys/ora123@host:port/schema as sysdba @prompt-demo.sql

适用于 Windows 和 Linux。

所以你可以在开发中用(大概)一个固定的已知值来做到这一点;在产品中只是 运行 和以前一样,必须手动输入值。

你仍然会看到dev中的提示文字,但不会停下来等待输入。


如果你有多个提示,你可以使用多个回显:

(echo schema_name && echo something_else) | sqlplus ...

两者都适用;在 Linux 中,您还可以使用带有嵌入式换行符的单个打印语句:

print "schema_name\nsomething_else\n" | sqlplus ...

或 heredoc:

sqlplus sys/ora123@host:port/schema as sysdba @prompt-demo.sql <<!EOF
schema_name
something_else
!EOF

但这对您的 Windows 开发箱没有帮助。 (Windows 上可能有一个等价的 heredoc,但我认为它基本上是重新排列回声...)