我有一个 *.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 脚本/批处理文件中:
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 ...
或定界符:
sqlplus sys/ora123@host:port/schema as sysdba @prompt-demo.sql <<!EOF
schema_name
something_else
!EOF
但这对您的 Windows 开发盒没有帮助。 (Windows 上可能有一个等效的heredoc,但我认为它基本上是重新排列回声......)
关于database - Oracle sqlplus > 替换提示变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48804924/