Carácter de escape de Oracle SQL (para un '&')


86

Mientras intento ejecutar declaraciones de inserción de SQL utilizando Oracle SQL Developer , sigo generando un mensaje de "Ingresar valor de sustitución":

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

Intenté escapar del carácter especial en la consulta usando el '\' anterior, pero todavía no puedo evitar el signo '&', lo que provoca una sustitución de cadena.

Respuestas:


125

& es el valor predeterminado de DEFINE, que le permite utilizar variables de sustitución. Me gusta apagarlo usando

SET DEFINE OFF

entonces no tendrá que preocuparse por escapar o por CHR (38).


60

|| chr(38) ||

Esta solución es perfecta.


2
Esto hace el trabajo, pero es un poco torpe cuando se trata de cadenas preexistentes.
— alumno de clase

Para mí, SET DEFINE OFF no funcionó. Tu solución funcionó. Gracias ...
— Ashok kumar

31

Establezca el carácter definido en algo distinto a &

SET DEFINE ~
crear tabla bla (x varchar (20));
insertar en blah (x) valores ('blah & amp');
seleccionar * de bla;

X                    
-------------------- 
bla y amp 


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

Gracias a Jeffrey Kemp por proporcionar una solución con || chr (38) ||

Esta es una solución general mucho mejor que es independiente de los privilegios del usuario (es decir, cuando los usuarios no tienen permitido SET DEFINE OFF) y para cuando los usuarios quieren especificar ambos símbolos y marcas en el texto y variables definidas en el mismo comando SQL.
— Análisis difuso

12
SELECT 'Free &' || ' Clear' FROM DUAL;

4

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


El ampersand solo necesita estar al final de la cadena, ahorrando la mitad de la concatenación. select 'one&' || 'two' from dual
— durette

1

La respuesta real es que necesita establecer el carácter de escape en '\': SET ESCAPE ON

El problema puede haber ocurrido porque el escape estaba deshabilitado o porque el carácter de escape se estableció en algo diferente a '\'. La declaración anterior permitirá el escape y lo establecerá en '\'.


Ninguna de las otras respuestas publicadas anteriormente responde realmente a la pregunta original. Todos solucionan el problema pero no lo resuelven.


4
Leí en Ask Tom ( asktom.oracle.com/pls/asktom/… ) que "SET ESCAPE es un sqplus'ism". Entonces, esta solo sería la respuesta real si la pregunta fuera sobre SQL * Plus.
— Karl Kieninger

-1

agregue esto antes de su solicitud

set define off;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.