2016-04-18 18 views
0

Ich füge ein paar Datenzeilen in eine Tabelle ein, und eine davon verursacht ein ungewöhnliches Ergebnis. Der Code istOracle SQL - Einfügen einer Zeile verursacht eine Popup-Box?

Wenn ich diese Anweisung ausführen, bekomme ich ein Pop-up mit dem Wort Intermediates. Wenn ich das X auf dem Pop-up klicken, wird die Zeile als

eingefügt
APIs null 

Anstatt als

APIs & Intermediates 

Weiß jemand, was hier vor sich geht?

+3

& entkam werden muss oder verwenden Sie 'SET DEFINE OFF' vor Abfrage ausführen Oracle verwendet und definiert/erlaubt eine Benutzereingabe zur Laufzeit – xQbert

+0

Lange Diskussion über es hier: https://community.oracle.com/thread/468604?tstart=0 – xQbert

+1

@xQbert: um genau zu sein: die Oracle ** Tools * * Verwenden Sie den '&' für die Laufzeiteingabe. Nicht die Oracle-Datenbank. Wenn Sie ein anderes Tool als SQL * Plus oder SQL Developer verwenden, geschieht dies nicht. –

Antwort

1

Ein kaufmännisches Und-Zeichen & muss in einer SQL-Zeichenfolge maskiert werden.

Sie können stattdessen durch den Zeichencode ersetzen.

INSERT INTO TABLE_GROUPRISK 
(GROUP, RISKLEVEL) VALUES ('APIs ' || chr(38) || ' Intermediates' ,'Low'); 

Alternativ können Sie das & vor dem ersten Apostroph setzen

INSERT INTO TABLE_GROUPRISK 
(GROUP, RISKLEVEL) VALUES ('APIs &' || ' Intermediates','Low'); 
+0

Das hat perfekt funktioniert. Danke CathalMF – jdjohnson920

+0

@ jdjohnson920 Vergessen Sie nicht zu upvote und markieren Sie es als die richtige Antwort. – CathalMF

3

‚&‘ für Substitutionsvariablen verwendet wird, so dass, wenn Sie schreiben ‚&‘ Oracle fordert ein Wert aa Ersatz zu verwenden, ; zum Beispiel:

SQL> INSERT INTO TABLE_GROUPRISK 
    2 ("GROUP", RISKLEVEL) VALUES ('APIs & Intermediates','Low'); 
Enter value for intermediates: XXX 
old 2: ("GROUP", RISKLEVEL) VALUES ('APIs & Intermediates','Low') 
new 2: ("GROUP", RISKLEVEL) VALUES ('APIs XXX','Low') 

1 row created. 

Sie können es nicht einfach entkommen:

SQL> INSERT INTO TABLE_GROUPRISK 
    2 ("GROUP", RISKLEVEL) VALUES ('APIs \& Intermediates','Low'); 
Enter value for intermediates: YYY 
old 2: ("GROUP", RISKLEVEL) VALUES ('APIs \& Intermediates','Low') 
new 2: ("GROUP", RISKLEVEL) VALUES ('APIs \YYY','Low') 

1 row created. 

SQL> INSERT INTO TABLE_GROUPRISK 
    2 ("GROUP", RISKLEVEL) VALUES (q'[APIs & Intermediates]','Low'); 
Enter value for intermediates: ZZZ 
old 2: ("GROUP", RISKLEVEL) VALUES (q'[APIs & Intermediates]','Low') 
new 2: ("GROUP", RISKLEVEL) VALUES (q'[APIs ZZZ]','Low') 

1 row created. 

Sie Substitution vermeiden entscheiden können:

SQL> set define off 
SQL> INSERT INTO TABLE_GROUPRISK 
    2 ("GROUP", RISKLEVEL) VALUES ('APIs & Intermediates','Low'); 

1 row created. 



SQL> select "GROUP" from table_grouprisk; 

GROUP 
-------------------------------------------------------------------------------- 
APIs XXX 
APIs \YYY 
APIs ZZZ 
APIs & Intermediates 
Verwandte Themen