Oracle SQL-Escapezeichen (für ein '&')

86

Beim Versuch, SQL-Einfügeanweisungen mit Oracle SQL Developer auszuführen, wird weiterhin die Eingabeaufforderung "Substitutionswert eingeben" generiert:

insert into agregadores_agregadores 
(
 idagregador,
 nombre,
 url
) 
values 
(
 2,
 'Netvibes',
 'http://www.netvibes.com/subscribe.php?type=rss\&url='
);

Ich habe versucht , das Sonderzeichen in der Abfrage mit dem obigen '\' zu umgehen, aber ich kann das kaufmännische Und '&' immer noch nicht vermeiden, was zu einer Zeichenfolgenersetzung führt.

ian_scho
quelle

Antworten:

125

Das & ist der Standardwert für DEFINE, mit dem Sie Substitutionsvariablen verwenden können. Ich schalte es gerne mit aus

SET DEFINE OFF

dann müssen Sie sich keine Sorgen um Flucht oder CHR machen (38).

Neil Kodner
quelle
58

|| chr(38) ||

Diese Lösung ist perfekt.

Aseem
quelle
2
Dies erledigt die Arbeit, ist aber etwas umständlich, wenn es um bereits vorhandene Zeichenfolgen geht.
Aglassman
Bei mir hat SET DEFINE OFF nicht funktioniert. Ihre Lösung hat funktioniert. Vielen Dank ...
Ashok Kumar
31

Setzen Sie das definierte Zeichen auf etwas anderes als &

SET DEFINE ~
erstelle Tabelle bla (x varchar (20));
in blah (x) Werte einfügen ('blah & amp');
wähle * aus bla;

X.                    
-------------------- 
bla & amp 

RC.
quelle
27
oder SET DEFINE OFF
dpbradley
15
insert into AGREGADORES_AGREGADORES (IDAGREGADOR,NOMBRE,URL)
values (2,'Netvibes',
'http://www.netvibes.com/subscribe.php?type=rss' || chr(38) || 'amp;url=');
Jeffrey Kemp
quelle
Vielen Dank an Jeffrey Kemp für die Bereitstellung der Lösung mit || chr (38) ||
Dies ist eine viel bessere allgemeine Lösung, die unabhängig von Benutzerrechten ist (dh wenn Benutzer DEFINE OFF nicht festlegen dürfen) und wenn Benutzer sowohl kaufmännisches Und im Text als auch definierte Variablen im selben SQL-Befehl angeben möchten.
Fuzzy-Analyse
12
SELECT 'Free &' || ' Clear' FROM DUAL;
drj
quelle
4

select 'one'||'&'||'two' from dual

Izo
quelle
Das kaufmännische Und muss sich nur am Ende der Zeichenfolge befinden, wodurch die Hälfte der Verkettung eingespart wird. select 'one&' || 'two' from dual
Durette
1

Die eigentliche Antwort ist, dass Sie das Escape-Zeichen auf '\' setzen müssen: SET ESCAPE ON

Das Problem ist möglicherweise aufgetreten, weil das Escapezeichen deaktiviert wurde oder das Escapezeichen auf etwas anderes als '\' gesetzt wurde. Die obige Anweisung ermöglicht das Escapezeichen und setzt sie auf '\'.


Keine der anderen zuvor veröffentlichten Antworten beantwortet tatsächlich die ursprüngliche Frage. Sie alle umgehen das Problem, lösen es aber nicht.

Schreckliche Kaulquappe
quelle
4
Ich habe auf Ask Tom ( asktom.oracle.com/pls/asktom/… ) gelesen, dass "SET ESCAPE ein sqplus'ism ist". Dies wäre also nur die eigentliche Antwort, wenn die Frage SQL * Plus wäre.
Karl Kieninger
0

Fügen Sie dies vor Ihrer Anfrage hinzu

set define off;
Helali
quelle