Wie eine Zeichenfolge einzufügen, die ein „&“ enthält
Frage
Wie kann ich eine Insert-Anweisung schreiben, die das & Zeichen enthält? Zum Beispiel, wenn ich will „J & J Construction“ in eine Spalte in der Datenbank einzufügen.
Ich bin mir nicht sicher, ob es einen Unterschied macht, aber ich bin mit Oracle 9i.
Lösung
Ich halte dies auf zu vergessen und kommt wieder zu ihm zurück! Ich denke, die beste Antwort ist eine Kombination aus den bisher gegebenen Antworten.
Zum einen & ist die Variable Präfix in sqlplus / sqldeveloper, damit das Problem -. Wenn es angezeigt wird, erwartet wird, Teil eines Variablennamens sein
SET DEFINE OFF sqlplus Interpretation und auf diese Weise zu stoppen.
Aber was, wenn Sie sqlplus Variablen verwenden müssen und wörtliche & Zeichen?
- Sie müssen SET ON DEFINE machen Variablen arbeiten
- Und SET ON ESCAPE Verwendungen von & zu entkommen.
z.
set define on
set escape on
define myvar=/forth
select 'back\\ \& &myvar' as swing from dual;
Erzeugt:
old 1: select 'back\\ \& &myvar' from dual
new 1: select 'back\ & /forth' from dual
SWING
--------------
back\ & /forth
Wenn Sie wollen ein anderes Escape-Zeichen verwenden:
set define on
set escape '#'
define myvar=/forth
select 'back\ #& &myvar' as swing from dual;
Wenn Sie ein bestimmtes Escape-Zeichen gesetzt, können Sie ‚SP2-0272: Charakter nicht entweichen kann alphanumerische oder Leerzeichen seine‘ sehen. Dies ist wahrscheinlich bedeutet, dass Sie bereits die Escape-Zeichen haben definiert, und die Dinge schrecklich selbstreferentiell. Der saubere Weg, um dieses Problem zu vermeiden, ist zunächst zu entkommen off zu setzen:
set escape off
set escape '#'
Andere Tipps
Wenn Sie es von SQLPLUS Gebrauch machen
SET DEFINE OFF
stoppen sie beschreiten und als Sonderfall
Eine alternative Lösung, die Verwendung und die Verkettungs chr Funktion:
select 'J' || chr(38) || 'J Construction' from dual;
Die korrekte Syntax ist
set def off;
insert into tablename values( 'J&J');
Es gibt immer die chr () -Funktion, die eine ASCII-Code-String konvertiert.
dh. so etwas wie: EINFÜGEN IN Tabelle VALUES ( CONCAT ( 'J', CHR (38), 'J') )
SET SCAN OFF ist veraltet http://download-uk.oracle. com / docs / cd / B10501_01 / server.920 / a90842 / apc.htm
In einem Programm, verwenden Sie immer eine parametrisierte Abfrage. Es vermeidet SQL-Injection-Angriffe sowie andere Zeichen, die mit dem SQL-Parser speziell sind.
Ich habe festgestellt, dass eine der beiden folgenden Optionen funktioniert:
SET DEF OFF
oder
SET SCAN OFF
Ich weiß nicht genug über Datenbanken wissen, ob man besser oder „mehr rechts“ als der andere ist. Auch wenn es etwas besser als diese beiden, lassen Sie es mich wissen.
Sie können einfügen eine solche Zeichenfolge als 'J' || '&' || 'Konstruktion' . Es funktioniert gut.
insert into table_name (col_name) values('J'||'&'||'Construction');
INSERT INTO TEST_TABLE VALUES('Jonhy''s Sport &'||' Fitness')
Diese Abfrage Ausgabe: Jonhy Sport & Fitness
SET ESCAPE ON;
INSERT VALUES("J\&J Construction") INTO custnames;
(Ungeprüfte, keine Oracle-Box zur Hand hat, und es ist schon eine Weile)
Wenn Sie SQL verwenden und dann denke ich, dass Sie den Befehl ausgeben müssen
SET SCAN OFF
Stop mit SQL / Plus, empfehle ich PL / SQL Developer es viel mehr ist als ein SQL-Tool.
P. S. Einige Leute bevorzugen TOAD .
Sehen Sie, Andrew:
"J & J Construction" :
SELECT CONCAT('J', CONCAT(CHR(38), 'J Construction')) FROM DUAL;