Oracle PLSQL:如何根据每个值使用替换变量?
Oracle PLSQL : How to use substitution variable based on each value?
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 中的值。
即它应该提示 'enter value for A'。
所以每次如果我更改 v_test 的值,那么该值应该提示。
有什么解决办法吗?
你可以这样使用:
Declare
v_temp varchar2(30);
Begin
v_temp := &enter_value_for_A;
dbms_output.put_line('v_temp :='||v_temp);
end;
PL/SQL 不是交互式语言,它用于编写 API 而不是 UI。同样SQL*Plus没有配备IF或ELSE等控制字,它不是编程语言。
如果您需要更智能的 UI 来启动您的代码,您应该使用 UI 编程工具。由于您正在使用 SQL*而且您的用户可以访问 OS,因此 shell 脚本或 .bat
文件似乎是最佳选择。另外,we can run web pages straight out of the database 但这可能有点 over-engineered,这取决于您的要求的复杂程度。
如果这些建议都不吸引您,您可以尝试更详细的 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.
你可以这样修改你的代码,
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;
/
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 中的值。 即它应该提示 'enter value for A'。 所以每次如果我更改 v_test 的值,那么该值应该提示。
有什么解决办法吗?
你可以这样使用:
Declare
v_temp varchar2(30);
Begin
v_temp := &enter_value_for_A;
dbms_output.put_line('v_temp :='||v_temp);
end;
PL/SQL 不是交互式语言,它用于编写 API 而不是 UI。同样SQL*Plus没有配备IF或ELSE等控制字,它不是编程语言。
如果您需要更智能的 UI 来启动您的代码,您应该使用 UI 编程工具。由于您正在使用 SQL*而且您的用户可以访问 OS,因此 shell 脚本或 .bat
文件似乎是最佳选择。另外,we can run web pages straight out of the database 但这可能有点 over-engineered,这取决于您的要求的复杂程度。
如果这些建议都不吸引您,您可以尝试更详细的 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.
你可以这样修改你的代码,
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;
/