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,但我认为它基本上是重新排列回声...)
我有一个 *.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,但我认为它基本上是重新排列回声...)