Oracle sqlplus>替换一个提示变量

时间:2018-02-15 10:26:20

标签: database oracle plsql sqlplus

我有一个* .sql脚本文件,此文件中有一些cell.imageTapDelegate = self func didTapProfileImage(with imageUrl: String) { print("Profile image tapped") let storyboard = UIStoryboard(name: "SbIdentifier", bundle: nil) let profileVC = storyboard.instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController profileVC.imageUrl = imageUrl self.navigationController?.pushViewController(profileVC, animated: true) } 个connands强制用户键入somthing。

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

有没有办法压制问题并用预先定义的变量替换它的值?

这是我的测试代码:

PROMPT

以及我如何执行它的方式:

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 命令。

1 个答案:

答案 0 :(得分:2)

您可以从命令行提供对提示的响应,必要时包装在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语句:

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等价物,但我认为它基本上重新排列回声...)