web-dev-qa-db-fra.com

Comment éviter la substitution de variable dans Oracle SQL Developer avec 'trinidad & tobago'

Lorsque j'essaie d'exécuter cette instruction dans Oracle SQL Developer 2.1, une boîte de dialogue "Entrer une variable de substitution" s'ouvre et demande une valeur de remplacement pour TOBAGO.

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

Comment puis-je éviter cela sans recourir à chr(38) ou u'trinidad \0026 tobago' qui masquent tous deux l'objectif de la déclaration?

98
Janek Bogucki

Appelez ceci avant la requête:

set define off;

Alternativement, hacky:

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

De Optimisation SQL * Plus :

SET DEFINE OFF désactive l'analyse des commandes à remplacer variables de substitution avec leurs valeurs.

165
Nick Craver

En SQL * Plus, mettre SET DEFINE ? en haut du script résout normalement le problème. Cela pourrait également fonctionner pour Oracle SQL Developer.

14
diederikh

cela fonctionnera comme vous l'avez demandé sans 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';
0
nikhil sugandh