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.

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


58

|| chr(38) ||

Diese Lösung ist perfekt.


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 


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

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;

4

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


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.


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;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.