0

PL/SQL でこのスクリプトを実行しようとしています。しかし、常にエラーが発生しています。一重引用符を二重引用符に置き換えてみましたが、役に立ちませんでした。

ACCEPT p_name PROMPT "Enter Customer Name: "
VARIABLE g_output VARCHAR2(200)
DECLARE
   v_street VARCHAR2(30);
   v_city VARCHAR2(20);
   v_prov VARCHAR2(20);
   v_postal VARCHAR2(10);
BEGIN
   SELECT cstreet, ccity, cprov, cpostal
     INTO v_address,v_city,v_state,v_zip
     FROM customer
    WHERE cname = "&p_name";
   :g_output := "&p_name" || " " ||v_street || " " || v_city;
   :g_output := :g_output " " || v_prov || " " || v_postal;
END;
/
PRINT g_output

エラー:

Enter Customer Name: Ankur Kaushal
old  10:     WHERE cname = "&p_name";
new  10:     WHERE cname = "Ankur Kaushal";
old  11:    :g_output := "&p_name" || " " ||v_street || " " || v_city;
new  11:    :g_output := "Ankur Kaushal" || " " ||v_street || " " || v_city;
   :g_output := :g_output " " || v_prov || " " || v_postal;
                          *
ERROR at line 12:
ORA-06550: line 12, column 27:
PLS-00103: Encountered the symbol " " when expecting one of the following:
. ( * @ % & = - + ; < / > at in is mod remainder not rem
<an exponent (**)> <> or != or ~= >= <= <> and or like
between || indicator multiset member SUBMULTISET_
The symbol "." was substituted for " " to continue.


Input truncated to 14 characters

G_OUTPUT
--------------------------------------------------------------------------------

私がここで犯している間違いはありますか?

4

3 に答える 3

1

Oracle SQL および PL/SQL では、一重引用符を使用し'て文字列を区切ります。二重引用符"は、識別子 (テーブル名、列名など) を示すために使用されます。

すべての二重引用符を一重引用符に置き換えます。

また、SQL*Plus は、ユーザー インターフェイスとして使用するには不十分なツールであることに注意してください。ユーザーが 2 つの一重引用符 ("O''Reilly") を手動で入力する以外に、引用符 ("O''Reilly") を含む名前で実際のコードを機能させる方法はありません。

于 2012-07-10T12:38:31.707 に答える
1

最後から 2 番目の行は

  :g_output := :g_output || ' ' || v_prov || ' ' || v_postal; 

?

于 2012-07-10T12:28:21.880 に答える
0
 SELECT cstreet, ccity, cprov, cpostal
 INTO v_address, v_city, v_prov, v_zip

の宣言はありませんv_state

于 2014-03-19T09:29:08.297 に答える