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.

War es hilfreich?

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') )

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top