Oracle PLSQL:如何根据每个值使用替换变量?
Posted
技术标签:
【中文标题】Oracle PLSQL:如何根据每个值使用替换变量?【英文标题】:Oracle PLSQL : How to use substitution variable based on each value? 【发布时间】:2018-02-16 06:25:46 【问题描述】:Declare
v_test varchar2(30) := 'enter value for A';
v_temp;
Begin
v_temp := &v_test;
dbms_output.put_line('v_temp :='||v_temp);
end;
在执行上面的 PLSQL 块时,对于替换变量 &v_test,而不是提示输入 v_test 的值,它应该提示 v_test 中的值。 即它应该提示“输入 A 的值”。 所以每次如果我改变 v_test 的值,那么这个值应该会提示。
有什么解决办法吗?
【问题讨论】:
【参考方案1】:PL/SQL 不是一种交互式语言,它用于编写 API 而不是 UI。同样,SQL*Plus 也没有配备 IF 或 ELSE 等控制字,它不是一种编程语言。
如果您需要更智能的 UI 来启动您的代码,您应该使用 UI 编程工具。当您使用 SQL*Plus 时,您的用户可以访问操作系统,因此 shell 脚本或.bat
文件似乎是最佳选择。另外,we can run web pages straight out of the database 可能有点过度设计,这取决于您的要求可能有多复杂。
如果这些建议都没有吸引力,您可以尝试更详细的 SQL*Plus 提示:
ACCEPT v_test CHAR FORMAT 'A30'
PROMPT 'Enter the test you want to run: A , B or C :'
ACCEPT v_deptno NUMBER FORMAT '99'
PROMPT 'If you chose A please enter DEPT NO or skip:'
ACCEPT v_mgr CHAR FORMAT 'A30'
PROMPT 'If you chose B please enter MGR NAME or skip:'
ACCEPT v_stdt DATE FORMAT 'YYYY-MM-DD'
PROMPT 'If you chose C enter START DATE (YYYY-MM-DD) or skip:'
ACCEPT v_endt DATE FORMAT 'YYYY-MM-DD'
PROMPT 'If you chose C enter END DATE (YYYY-MM-DD) or skip:'
现在您可以将这些变量传递给一个匿名块,该块确实具有确定已呈现哪些值并采取适当操作所需的 IF 和 ELSE 控制字。
我同意它笨拙且不太宽容,因此用户会讨厌它;但正如我所说,这不是这些工具真正应该做的。无论如何,find out more。
【讨论】:
【参考方案2】:你可以这样使用:
Declare
v_temp varchar2(30);
Begin
v_temp := &enter_value_for_A;
dbms_output.put_line('v_temp :='||v_temp);
end;
【讨论】:
【参考方案3】:你可以像这样修改你的代码,
Declare
v_temp varchar2(30) := &B;
Begin
dbms_output.put_line('v_temp :='||v_temp);
end;
/
Declare
v_temp varchar2(30) := &A;
Begin
dbms_output.put_line('v_temp :='||v_temp);
end;
/
【讨论】:
以上是关于Oracle PLSQL:如何根据每个值使用替换变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何调用Oracle plsql中另一个存储函数返回名称的存储函数?
Oracle PlSql 问题集锦 - replace 隐式转换的探索
Oracle PlSql 问题集锦 - replace 隐式转换的探索