Cómo evitar la sustitución de variables en Oracle SQL Developer con 'trinidad y tobago'

111

Cuando intento ejecutar esta declaración en Oracle SQL Developer 2.1, aparece un cuadro de diálogo "Ingresar variable de sustitución" solicitando un valor de reemplazo para TOBAGO ,

update t set country = 'Trinidad and Tobago' where country = 'trinidad & tobago';

¿Cómo puedo evitar esto sin recurrir a chr(38)o u'trinidad \0026 tobago'que ambos oscurecen el propósito de la declaración?

Janek Bogucki
fuente
1
Es extraño, cuando intenté ejecutar una consulta exactamente como esa en SQL Developer 2.1, ¿no obtuve la ventana de variable de reemplazo? (Y mis definiciones ciertamente están
activadas
Esta pregunta me ayudó mucho.
Oh Chin Boon

Respuestas:

191

Llame a esto antes de la consulta:

set define off;

Alternativamente, hacky:

update t set country = 'Trinidad and Tobago' where country = 'trinidad &' || ' tobago';

Desde Tuning SQL * Plus :

SET DEFINE OFF deshabilita el análisis de comandos para reemplazar las variables de sustitución con sus valores.

Nick Craver
fuente
9
¿Qué (más) hace set define off;?
Xonatron
15

En SQL * Plus, colocarlo SET DEFINE ?en la parte superior del script normalmente resolverá esto. También podría funcionar para Oracle SQL Developer.

Diederikh
fuente
2
SET DEFINE? suprime el comportamiento de sustitución de variables en SQL Developer 2.1. Como señaló Nick, SET DEFINE OFF también funciona.
Janek Bogucki
set define funciona, pero el DBA no permite usarlo a veces, no sé por qué
nikhil sugandh
1

esto funcionará como pediste sin CHAR (38):

update t set country = 'Trinidad and Tobago' where country = 'trinidad & '|| 'tobago';

create table table99(col1 varchar(40));
insert into table99 values('Trinidad &' || '  Tobago');
insert into table99 values('Trinidad &' || '  Tobago');
insert into table99 values('Trinidad &' || '  Tobago');
insert into table99 values('Trinidad &' || '  Tobago');
SELECT * FROM table99;

update table99 set col1 = 'Trinidad and Tobago' where col1 = 'Trinidad &'||'  Tobago';
nikhil sugandh
fuente
Mi pregunta era cómo se podía hacer esto sin usar chr(38).
Janek Bogucki
@JanekBogucki tómatelo correctamente ahora sin usar CHAR (38)
nikhil sugandh
Te di una respuesta diferente ya que ya tienes la respuesta marcada en verde, pero
votaste en contra
Compañero, no puedes imaginar la agonía que me resolviste, el desarrollador de sql no acepta set define off cuando ejecutas un script. Esta es la solución para mí
BrokenFrog
-3

Yo también estaba teniendo algún problema con esto. Algo se estaba iniciando cada vez que intentaba configurar una conexión a cualquier base de datos.

Lo que funcionó para mí fue eliminar cualquier script de inicio que pueda haber configurado.

es decir, Tools>Preferences...>Databasey elimine cualquier ruta de archivo que tenga en el cuadro de texto etiquetado "Nombre de archivo para el script de inicio de conexión".

ufo2mstar
fuente
-3

desactivar el escaneo; El comando anterior también funciona.

Dinesh Garud
fuente
Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar una aclaración de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones y, una vez que gane suficiente reputación, podrá comentar cualquier publicación. Si tiene una pregunta relacionada pero diferente, haga una nueva pregunta que haga referencia a esta si le ayudará a proporcionar contexto.
Rohan Khude