2009-07-16 5 views
68

Tout en essayant d'exécuter les instructions d'insertion SQL en utilisant Oracle SQL Developer je continue à générer une « Entrez la valeur de substitution » invite:caractère d'échappement Oracle SQL (pour un « & »)

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

J'ai essayé escaping the special character in the query en utilisant le « \ 'ci-dessus, mais je ne peux toujours pas éviter l'esperluette,' & ', provoquant une substitution de chaîne.

Allez-y punks, faire ma journée :)

Répondre

101

la & est la valeur par défaut pour DEFINE, qui vous permet d'utiliser variables de substitution. Je tiens à le désactiver à l'aide

SET DEFINE OFF

alors vous n'aurez pas à vous soucier de s'échapper ou CHR (38).

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

Merci à Jeffrey Kemp de fournir une solution avec || chr (38) || –

+0

Il s'agit d'une meilleure solution générale indépendante des privilèges des utilisateurs (c'est-à-dire lorsque les utilisateurs ne sont pas autorisés à définir DEFINE OFF) et lorsque les utilisateurs veulent spécifier les deux esperluettes dans le texte et les variables définies dans la même commande SQL. – fuzzyanalysis

28

Définissez le définir caractère autre chose que &

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

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

+26

ou SET DEFINE OFF – dpbradley

49

|| chr(38) ||

Cette solution est parfaite.

+2

Cela fait le travail, mais est un peu maladroit lorsqu'il s'agit de chaînes préexistantes. – aglassman

+0

Loin de parfait – EoinS

3

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

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

La vraie réponse est que vous devez définir le caractère d'échappement à '\': SET ESCAPE

Le problème peut se produire soit parce que échappements était désactivé, ou l'évasion le caractère a été mis à autre chose que '\'. La déclaration ci-dessus permettra d'échapper et le définir sur '\'.


Aucune des réponses précédentes n'a répondu à la question initiale. Ils travaillent tous autour du problème mais ne le résolvent pas.

+4

J'ai lu sur Ask Tom (https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1629001802771) que "SET ESCAPE est un sqplus ' isme ". Donc, ce ne serait que la vraie réponse si la question portait sur SQL * Plus. –