我想在SQL * Plus脚本中使用绑定变量值作为输入提示。这是我尝试过的:
1)我定义了绑定变量如下
SQL>var prompt varchar2(100)
2)并使用PL / SQL
分配值SQL>exec select 'your name' into :prompt from dual
3)现在我可以按如下方式打印或选择绑定变量值:
SQL>select :prompt from dual;
:PROMPT
------------------------------------
your name
SQL>print prompt
PROMPT
------------------------------------
your name
4)现在我想将“你的名字”显示为ACCEPT提示,但我不知道如何实现:
SQL>accept input prompt 'prompt'
prompt
SQL>accept input prompt ':prompt'
:prompt
5)我能否将绑定值赋给替换变量,可以这样做:
SQL>define prompt = 'your name subst'
SQL>accept input prompt '&prompt.>'
your name subst>Bob
SQL>def input
DEFINE INPUT = "Bob" (CHAR)
我认为可以完成的唯一方法是SPOOLing到temp.sql文件并使用@ temp.sql运行它但这看起来像一个可怕的黑客
答案 0 :(得分:1)
您可以将the column ... new_value
syntax与查询一起使用,但除非您从脚本运行(因此set termout off
生效),否则您将获得额外的空行:
SQL> var prompt varchar2(100)
SQL> exec select 'your name' into :prompt from dual
PL/SQL procedure successfully completed.
SQL> set feedback off
SQL> column o_prompt new_value n_prompt noprint
SQL> select :prompt as o_prompt from dual;
SQL> accept input prompt '&n_prompt.>'
your name>Bob
SQL> def input
DEFINE INPUT = "Bob" (CHAR)
我认为没有办法直接从绑定变量定义替换变量,或者在纯客户端语句中使用绑定变量,如define,accept等。(除了print,这是一个客户端命令但是为此目的存在。)
当然,如果你这样做,那么你真的不需要绑定变量,你可以直接用以下方式完成:
SQL> set feedback off
SQL> column o_prompt new_value n_prompt noprint
SQL> select 'your name' as o_prompt from dual;
SQL> accept input prompt '&n_prompt.>'
your name>Bob
SQL> def input
DEFINE INPUT = "Bob" (CHAR)
答案 1 :(得分:1)
如上所述使用COL .. NEW_VALUE。
从我对SQL * Plus变量的全面讨论https://blogs.oracle.com/opal/entry/sqlplus_101_substitution_varia#3_2:
SQL> variable mybv varchar2(14)
SQL> begin
2 /* ... */
3 :mybv := 'report.log';
4 end;
5 /
将绑定变量的值传递给新的替换变量" nv"使用查询:
SQL> column mybvcol new_value nv noprint
SQL> select :mybv mybvcol from dual;
现在您可以在SPOOL命令中使用替换变量:
SQL> spool &nv
SPOOL命令的执行就像你输入了
一样SQL> spool report.log