【问题标题】:PLS-00201: identifier 'USER INPUT' must be declaredPLS-00201:必须声明标识符“用户输入”
【发布时间】:2013-01-17 21:51:23
【问题描述】:

当我尝试在提示“请输入区域:”时输入用户输入时,我收到错误“PLS-00201:必须声明标识符'CHICAGO'”,例如如果我输入“CHICAGO”(没有当然是引号)我收到 PLS-00201 错误。我不知道为什么-有什么想法吗?提前致谢。

ACCEPT p_1 PROMPT 'PLEASE ENTER THE REGION:'

DECLARE
  V_CHILD  REGIONS.CHILD_NAME%TYPE := &p_1;
  V_PARENT REGIONS.PARENT_NAME%TYPE;
  CURSOR REG_CUR (p_child_name varchar2) IS 
    SELECT UPPER(CHILD_NAME) 
      FROM REGIONS
     where CHILD_NAME = p_child_name;

BEGIN
  OPEN REG_CUR (V_CHILD);
  FETCH reg_cur INTO V_CHILD;
  WHILE REG_CUR%FOUND LOOP
    DBMS_OUTPUT.PUT_LINE(V_CHILD);
    FETCH reg_cur INTO V_CHILD;
  END LOOP;
  CLOSE REG_CUR;
END;

【问题讨论】:

  • 不熟悉“文档语法”,但我尝试了一下,但没有运气。感谢您的意见!

标签: sql oracle plsql cursor sqlplus


【解决方案1】:

如果您需要一个字符串,则需要在使用时将替换变量括在引号中:

  V_CHILD  REGIONS.CHILD_NAME%TYPE := '&p_1';

事实上,它试图将替换值解释为标识符,即另一个变量或列名。所以如果你输入CHICAGO,它会看到:

  V_CHILD  REGIONS.CHILD_NAME%TYPE := CHICAGO;

如果你输入了"CHICAGO":

  V_CHILD  REGIONS.CHILD_NAME%TYPE := "CHICAGO";

在 Oracle 中,使用双引号仍然表示标识符。实际上,您可以输入 'CHICAGO',并在您的输入中加上引号,并且它会起作用 - 但必须记住这样做并不理想。

如果你在 SQL*Plus 或 SQL Developer 中set verify on,那么你可以看到每个替换的前后,这有助于识别这样的事情。

【讨论】:

  • 天哪,就是这样!非常感谢,我已经为此工作了一段时间,作为一名学生,正是这些小事让你大吃一惊!
  • 我想那时我们都只是学生.. 奶酪好了-再次感谢!
猜你喜欢
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 2019-12-17
  • 2021-12-22
  • 2016-07-25
  • 2018-08-02
  • 1970-01-01
相关资源
最近更新 更多