2017-05-01 2 views
0

Ich möchte nur Substitutionsvariable verwenden, um den customer_name (varchar2) zu erhalten. Aber wenn ich das folgende Unterprogramm ausführe, wird die Ausnahme ausgelöst.Orakel Substitutionsvariable funktioniert nicht für varchar2

DECLARE 
    v_cid  dummytest.customer_id%type := &customer_id; 
    v_cname dummytest.customer_name%type := &customer_name; 
BEGIN 
    INSERT INTO dummytest (customer_id,customer_name) VALUES (v_cid,v_cname); 

    COMMIT; 
END; 

Fehler

Error report - 
ORA-06550: line 3, column 47: 
PLS-00201: identifier 'HUHU' must be declared 
ORA-06550: line 3, column 15: 
PL/SQL: Item ignored 
ORA-06550: line 5, column 72: 
PLS-00320: the declaration of the type of this expression is incomplete or malformed 
ORA-06550: line 5, column 72: 
PL/SQL: ORA-00904: "V_CNAME": invalid identifier 
ORA-06550: line 5, column 5: 
PL/SQL: SQL Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

Aber wenn ich geben Werte in Zahlen und erfolgreich eingesetzt wird. Bitte helfen Sie mir dabei.

Antwort

5

Substitution geschieht zuerst, so dass die folgende ...

v_cname dummytest.customer_name%type := &customer_name; 

... wird ...

v_cname dummytest.customer_name%type := HUHU; 

..., die aufgrund der fehlenden Apostrophe ist kein String, sondern ein Bezeichner, bei dem der Compiler die Quelle nicht bestimmen kann.

so, wenn Sie die Angebote für einen String (VARCHAR2) Substitution umfassen, die folgende ...

v_cname dummytest.customer_name%type := '&customer_name'; 

... wird ...

v_cname dummytest.customer_name%type := 'HUHU'; 

... das ist die Zeichenfolge, nach der Sie suchen.

Es funktioniert für Zahlen, da der Zahlentyp die Anführungszeichen nicht erfordert.

+0

habe es .. Vielen Dank ... – Saravanan

1

Substitutionsvariablen werden in Ihrem SQL-Skript mit der angegebenen Eingabe ersetzt, bevor das Skript analysiert und ausgeführt wird; Daher müssen Sie einfache String-Substitutionsvariablen in einfache Anführungszeichen setzen, damit sie schließlich zu String-Literalen werden.

v_cname dummytest.customer_name%type := '&customer_name'; 
+0

@ Danke für Ihre Antwort ammoQ ... – Saravanan