104 votes

Caractère d'échappement Oracle SQL (pour un '&')

En essayant d'exécuter des instructions d'insertion SQL en utilisant Développeur Oracle SQL Je continue à générer une invite "Entrez la valeur de substitution" :

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

J'ai essayé l'échappement du caractère spécial dans la requête en utilisant le "\" ci-dessus, mais je ne peux toujours pas éviter que l'esperluette, "&", provoque une substitution de chaîne.

148voto

Neil Kodner Points 1444

le & est la valeur par défaut de DEFINE, qui vous permet d'utiliser des variables de substitution. J'aime le désactiver en utilisant

SET DEFINE OFF

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

76voto

Aseem Points 291

|| chr(38) ||

Cette solution est parfaite.

3 votes

Cette méthode permet de faire le travail, mais elle est un peu maladroite lorsqu'il s'agit de cordes préexistantes.

0 votes

Pour moi, SET DEFINE OFF n'a pas fonctionné. Votre solution a fonctionné. Merci...

0 votes

Où puis-je trouver une liste complète des caractères chr() ? J'ai un problème similaire, mais dans mon cas, je cherche à échapper à un caractère ( ' ).

33voto

RC. Points 15804

Définir le caractère de définition à quelque chose d'autre que &

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

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

17voto

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

0 votes

Merci à Jeffrey Kemp pour avoir fourni la solution avec || chr(38) ||.

0 votes

Il s'agit d'une bien meilleure solution générale, indépendante des privilèges de l'utilisateur (c'est-à-dire lorsque les utilisateurs ne sont pas autorisés à SET DEFINE OFF) et pour les cas où les utilisateurs veulent spécifier à la fois des esperluettes dans le texte et des variables définies dans la même commande SQL.

17voto

drj Points 61
SELECT 'Free &' || ' Clear' FROM DUAL;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X