2009-07-16 11 views
68

Beim Versuch, SQL INSERT-Anweisungen auszuführen Oracle SQL Developer mit Ich halte Erzeugen einer Aufforderung „Substitutionswert eingeben“:Oracle SQL-Escape-Zeichen (für ein ‚&‘)

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

Ich habe versucht escaping the special character in the query mit dem ‚\ 'oben, aber ich kann immer noch nicht das Ampersand' & 'vermeiden, was eine String-Substitution verursacht.

Punks Go ahead, make my day :)

Antwort

101

die & ist der Standardwert für definieren, die Sie verwenden können Substitutionsvariablen. Ich mag es deaktivieren mit

SET DEFINE OFF

dann werden Sie nicht um Flucht oder CHR (38) kümmern.

14
insert into AGREGADORES_AGREGADORES (IDAGREGADOR,NOMBRE,URL) 
values (2,'Netvibes', 
'http://www.netvibes.com/subscribe.php?type=rss' || chr(38) || 'amp;url='); 
+0

Dank Jeffrey Kemp für die Lösung mit || Chr (38) || –

+0

Dies ist eine viel bessere allgemeine Lösung, die unabhängig von Benutzervorgaben ist (d. H. Wenn Benutzer DEFINE OFF nicht festlegen können) und wenn Benutzer sowohl Und-Zeichen in Text als auch definierte Variablen im selben SQL-Befehl angeben möchten. – fuzzyanalysis

28

das Zeichen etwas anderes definieren Stellen als &

 
SET DEFINE ~ 
create table blah (x varchar(20)); 
insert into blah (x) values ('blah&amp'); 
select * from blah; 

X      
-------------------- 
blah&amp 

+26

oder SET DEFINE OFF – dpbradley

49

|| chr(38) ||

Diese Lösung ist perfekt.

+2

Dies erledigt die Arbeit, ist aber ein wenig klobig im Umgang mit bereits vorhandenen Strings. – aglassman

+0

Weit von perfekt – EoinS

3

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

8
SELECT 'Free &' || ' Clear' FROM DUAL; 
1

Die wirkliche Antwort ist, dass Sie die Escape-Zeichen setzen müssen '\': SET ESCAPE ON

Das Problem aufgetreten sein kann, entweder weil entweichende deaktiviert wurde, oder die Flucht Zeichen wurde auf etwas anderes als '\' gesetzt. Die obige Anweisung ermöglicht es, die Zeichen und auf '\' zu setzen.


Keine der anderen zuvor geposteten Antworten beantworten die ursprüngliche Frage tatsächlich. Sie alle arbeiten an dem Problem, lösen es aber nicht auf.

+4

Ich las auf Ask Tom (https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1629001802771), dass "SET ESCAPE ist ein sqplus" ismus ". Das wäre also nur die richtige Antwort, wenn es um SQL * Plus ging. –