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.

ian_scho
fuente

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).

Neil Kodner
fuente
60

|| chr(38) ||

Esta solución es perfecta.

Aseem
fuente
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 

RC.
fuente
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=');
Jeffrey Kemp
fuente
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;
drj
fuente
4

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

Izo
fuente
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.

Renacuajo terrible
fuente
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;
Helali
fuente