1
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 的值,那么这个值应该会提示。

有什么解决办法吗?

4

3 回答 3

1

PL/SQL 不是一种交互式语言,它是用于编写 API 而不是 UI。同样 SQL*Plus 没有配备控制字如 IF 或 ELSE,它不是一种编程语言。

如果你需要一个更智能的 UI 来启动你的代码,你应该使用 UI 编程工具。当您使用 SQL*Plus 时,您的用户可以访问操作系统,因此 shell 脚本或.bat文件似乎是最佳选择。此外,我们可以直接从数据库中运行网页,但这可能有点过度设计,这取决于您的需求可能有多复杂。

如果这些建议都没有吸引力,您可以尝试更详细的 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 控制字,以确定已呈现哪些值并采取适当的操作。

我同意它笨拙且不太宽容,因此用户会讨厌它;但正如我所说,这不是这些工具真正应该做的。无论如何,了解更多

于 2018-02-16T07:08:16.617 回答
0

你可以这样使用:

Declare 
  v_temp  varchar2(30);
Begin
  v_temp := &enter_value_for_A;
  dbms_output.put_line('v_temp :='||v_temp);
end;
于 2018-02-16T07:02:17.933 回答
0

你可以像这样修改你的代码,

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;
/
于 2018-02-16T07:10:39.373 回答