Comment éviter la substitution de variables dans Oracle SQL Developer avec 'Trinidad & Tobago'

111

Lorsque j'essaye d'exécuter cette instruction dans Oracle SQL Developer 2.1, une boîte de dialogue "Enter Substitution Variable" apparaît demandant 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 aux u'trinidad \0026 tobago'deux obscurcissant le but de la déclaration?

Janek Bogucki
la source
1
C'est étrange, lorsque j'ai essayé d'exécuter une requête exactement comme celle dans SQL Developer 2.1, je n'ai pas obtenu la fenêtre de variable de remplacement? (Et mes définitions sont très certainement
activées
Cette question m'a beaucoup aidé.
Oh Chin Boon

Réponses:

192

Appelez ceci avant la requête:

set define off;

Alternativement, pirater:

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

À partir de Tuning SQL * Plus :

SET DEFINE OFF désactive l'analyse des commandes pour remplacer les variables de substitution par leurs valeurs.

Nick Craver
la source
9
Que fait (d'autre) set define off;?
Xonatron
15

En SQL * Plus, mettre SET DEFINE ?en haut du script résoudra normalement ce problème. Peut également fonctionner pour Oracle SQL Developer.

Diederikh
la source
2
DÉFINIR? supprime le comportement de substitution de variable dans SQL Developer 2.1. Comme indiqué par Nick, SET DEFINE OFF fonctionne également.
Janek Bogucki
set define fonctionne mais le DBA ne permettra pas de l'utiliser parfois je ne sais pas pourquoi
nikhil sugandh
1

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';
nikhil sugandh
la source
Ma question était de savoir comment cela pouvait être fait sans utiliser chr(38).
Janek Bogucki
@JanekBogucki prends-le correctement maintenant sans utiliser CHAR (38)
nikhil sugandh
Je vous ai donné une réponse différente car vous avez déjà une réponse cochée en vert mais vous avez
voté contre
Mate, vous ne pouvez pas imaginer quelle agonie vous avez résolue pour moi, le développeur SQL n'accepte pas la définition de set off lorsque vous exécutez un script. C'est la solution pour moi
BrokenFrog
-3

J'avais aussi un problème à ce sujet. Quelque chose se lançait à chaque fois que j'essayais de configurer une connexion à n'importe quelle base de données.

Ce qui a fonctionné pour moi a été de supprimer tout script de démarrage que vous auriez pu configurer!

c'est-à Tools>Preferences...>Database- dire et supprimez tout chemin de fichier que vous avez dans la zone de texte intitulée "Nom de fichier pour le script de démarrage de connexion"!

ufo2mstar
la source
-3

désactiver le balayage; La commande ci-dessus fonctionne également.

Dinesh Garud
la source
Cela ne répond pas à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article - vous pouvez toujours commenter vos propres articles, et une fois que vous aurez acquis une réputation suffisante, vous pourrez commenter n'importe quel article. Si vous avez une question connexe mais différente, posez une nouvelle question faisant référence à celle-ci si cela peut aider à fournir un contexte.
Rohan Khude