我希望在SQL*Plus脚本中使用bind变量值作为输入提示符。以下是我尝试过的:
1)我将绑定变量定义如下
SQL>var prompt varchar2(100)),并使用PL/SQL为其赋值。
SQL>exec select 'your name' into :prompt from dual3)现在我可以打印或选择bind变量值如下:
SQL>select :prompt from dual;
:PROMPT
------------------------------------
your name
SQL>print prompt
PROMPT
------------------------------------
your name4)现在我想让“您的名字”显示为“接受提示”,但我不知道如何做到这一点:
SQL>accept input prompt 'prompt'
prompt
SQL>accept input prompt ':prompt'
:prompt5)我是否能够将bind值赋值给替换变量,可以这样做:
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运行此文件,但这似乎是一次可怕的攻击。
发布于 2016-03-17 09:18:08
您可以在查询中使用 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)我不认为有任何方法可以直接从bind变量中定义替换变量,或者在纯客户端语句中使用bind变量,比如定义、接受等(打印除外,它是客户机命令,但为此目的而存在)。
当然,如果您正在这样做,那么您实际上不需要绑定变量,您可以直接使用以下方法来完成:
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)发布于 2016-03-18 04:33:43
用科尔..。正如前面提到的NEW_VALUE。
从我对SQL*Plus变量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;现在可以在假脱机命令中使用替换变量:
SQL> spool &nv执行SPOOL命令时,就好像您键入了
SQL> spool report.loghttps://stackoverflow.com/questions/36055827
复制相似问题