【问题标题】:SQL*Plus how to accept text variable from prompt?SQL*Plus 如何从提示中接受文本变量?
【发布时间】:2013-05-16 11:18:13
【问题描述】:

我是 psql 的初学者,我有一个问题。

代码如下:

SET serveroutput ON
ACCEPT myVariable PROMPT "Input value: ";

BEGIN
  dbms_output.put_line('My input variable is: '||&myVariable);
 END;

问题很简单:如何将文本传递给我的变量?如果我输入一个数字,它可以正常工作,我可以在日志中读取我的数字,但是如果我传递一个像“mytext”这样的文本而不是数字,我会收到一个错误:

    old:BEGIN


     dbms_output.put_line('My input variable is: '||&myVariable);
     END;


    new:BEGIN

  dbms_output.put_line('My input variable is: '||mytext);
 END;

    Error starting at line 5 in command:
    BEGIN
      dbms_output.put_line('My input variable is: '||&myVariable);
     END;
    Error report:
    ORA-06550: 2 sor, 50 oszlop:
    PLS-00201: identifier 'MYTEXT' must be declared
    ORA-06550: 2 sor, 3 oszlop:
    PL/SQL: Statement ignored
    06550. 00000 -  "line %s, column %s:\n%s"
    *Cause:    Usually a PL/SQL compilation error.
    *Action:

【问题讨论】:

    标签: oracle plsql sqlplus


    【解决方案1】:

    您必须将数据类型指定为ACCEPT statement 的一部分。如果没有给出,它假定一个数字。

    改用ACCEPT myVariable CHAR PROMPT 'Input value: ';

    【讨论】:

      【解决方案2】:

      当你使用字符替换变量时,如果它是一个字符串,你必须用引号将它括起来,否则 Oracle 会尝试将 value 解释为对象名称。您可以在“新”版本中看到这一点(显示是因为您有 set verify on),并且 sexta13 也提到了这一点。所以你会这样做:

       dbms_output.put_line('My input variable is: '||'&myVariable');
      

      但是在这种情况下你不需要连接值(无论是数字还是s字符串):

       dbms_output.put_line('My input variable is: &myVariable');
      

      【讨论】:

      • 你可能应该使用两个 & 符号:dbms_output.put_line('&&myVariable'); 这样它就不会询问已经定义的值。
      【解决方案3】:

      您没有在任何地方声明 MYTEXT 变量。

      dbms_output.put_line('My input variable is: '||mytext); -- here is the error. It should be &myVariable.
      

      【讨论】:

      • 不,代码在上面,输入VALUE是我给的“mytext”!
      猜你喜欢
      • 1970-01-01
      • 2015-11-01
      • 2021-10-25
      • 1970-01-01
      • 2011-04-10
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      相关资源
      最近更新 更多