4

当我尝试在提示“请输入区域:”时输入用户输入时,我收到错误“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;
4

1 回答 1

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',在您的输入中加上引号,并且它会起作用 - 但必须记住这样做并不理想。

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

于 2013-02-02T20:12:34.243 回答