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