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.