Como evitar a substituição de variável no Oracle SQL Developer com 'trinidad & tobago'

111

Quando tento executar esta instrução no Oracle SQL Developer 2.1, uma caixa de diálogo "Inserir variável de substituição" aparece solicitando um valor de substituição para TOBAGO ,

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

Como posso evitar isso sem recorrer a chr(38)ou sem u'trinidad \0026 tobago'que ambos obscureçam o propósito da declaração?

Janek Bogucki
fonte
1
Isso é estranho, quando tentei executar uma consulta exatamente como aquela no SQL Developer 2.1, não obtive a janela de substituição da variável? (E minhas definições certamente estão
ativadas
Essa pergunta me ajudou muito.
Oh Chin Boon,

Respostas:

192

Chame isso antes da consulta:

set define off;

Alternativamente, hacky:

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

Do Tuning SQL * Plus :

SET DEFINE OFF desativa a análise de comandos para substituir variáveis ​​de substituição por seus valores.

Nick Craver
fonte
9
O que (mais) faz set define off;?
Xonatron
15

No SQL * Plus, colocar SET DEFINE ?no topo do script normalmente resolverá isso. Pode funcionar para o Oracle SQL Developer também.

Dieerikh
fonte
2
DEFINIR DEFINIR? suprime o comportamento de substituição de variável no SQL Developer 2.1. Como notado por Nick, SET DEFINE OFF também funciona.
Janek Bogucki
set define funciona, mas o DBA não permite usá-lo às vezes eu não sei por que
nikhil sugandh
1

isso funcionará como você pediu sem 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
fonte
Minha dúvida era como isso poderia ser feito sem usar chr(38).
Janek Bogucki
@JanekBogucki faça corretamente agora, sem usar CHAR (38)
nikhil sugandh
Eu dei a você uma resposta diferente, pois você já marcou a resposta verde, mas você votou contra
nikhil sugandh
Cara você não pode imaginar que agonia você resolveu para mim, sql developer não aceita set define off quando você executa um script. Esta é a solução para mim
BrokenFrog
-3

Eu também estava tendo problemas com isso. Algo estava iniciando toda vez que eu tentava configurar uma conexão com qualquer banco de dados.

O que funcionou para mim foi remover qualquer script de inicialização que você possa ter configurado!

ou seja, Tools>Preferences...>Databaseremova qualquer caminho de arquivo que você tenha na caixa de texto chamada "Nome do arquivo para o script de inicialização da conexão"!

ufo2mstar
fonte
-3

desativar a varredura; O comando acima também funciona.

Dinesh Garud
fonte
Isso não fornece uma resposta para a pergunta. Para criticar ou solicitar esclarecimentos de um autor, deixe um comentário abaixo de sua postagem - você sempre pode comentar em suas próprias postagens e, assim que ganhar reputação suficiente, poderá comentar em qualquer postagem. Se você tiver uma pergunta relacionada, mas diferente, faça uma nova pergunta referenciando esta, se isso ajudar a fornecer contexto.
Rohan Khude