database - Oracle sqlplus > 替换提示变量

标签 database oracle plsql sqlplus

我有一个 *.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/

相关文章:

php - 多数据库与复合主键 - Laravel Saas 应用程序

java - tomcat jdbc SlowQueryReport拦截器-单独文件登录

sql - 错误(11,1): PLS-00103: Encountered the symbol “DECLARE”

oracle - Oracle 中函数的 DETERMINISTIC 和 PARALLEL_ENABLED 之间的区别

android - 如何在微调器中查看数据库值?

database - sybase系统程序-如何得到结果?

php - 如何在 Laravel 中制作简单的动态下拉列表?

oracle - 行数与 oracle 中的类似查询不匹配

plsql - 使用带有绑定(bind)变量的 Execute Immediate 语句时出现无效的表名错误

sql - 使用 PL/SQL 将值插入全局临时表