PLS-00201:必须声明标识符'USER INPUT'

时间:2013-02-02 19:39:04

标签: sql oracle plsql cursor sqlplus

我收到错误“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;

1 个答案:

答案 0 :(得分:7)

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

  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,那么您可以看到每次替换之前和之后,这有助于识别这样的事情。