4

「地域を入力してください:」というプロンプトでユーザー入力を入力しようとすると、「PLS-00201:識別子「シカゴ」を宣言する必要があります」というエラーが表示されます。たとえば、「シカゴ」と入力した場合(もちろん引用符なし) )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'、それは機能しますが、それを覚えておく必要があるのは理想的ではありません。

SQL *PlusまたはSQLDeveloperを使用している場合set verify onは、各置換の前後を確認できます。これは、このようなものを識別するのに役立ちます。

于 2013-02-02T20:12:34.243 に答える