【问题标题】:Oracle PLSQL : How to use substitution variable based on each value?Oracle PLSQL:如何根据每个值使用替换变量?
【发布时间】: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 的值,那么这个值应该会提示。

有什么解决办法吗?

【问题讨论】:

    标签: sql oracle plsql plsqldeveloper plsql-package


    【解决方案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;
        /
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-20
          • 2020-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-09
          相关资源
          最近更新 更多