141 votes

Comment éviter la substitution de variables dans Oracle SQL Developer

Lorsque j'essaie d'exécuter cette déclaration dans Oracle SQL Developer 2.1, une boîte de dialogue "Enter Substitution Variable" s'ouvre en 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 u'trinidad \0026 tobago' qui obscurcissent tous les deux l'objectif de la déclaration?

1 votes

C'est étrange, lorsque j'ai tenté d'exécuter une requête exactement comme ça dans SQL Developer 2.1, je n'ai pas obtenu la fenêtre de variable de remplacement? (Et mes définitions sont certainement activées)

1 votes

Cette question m'a beaucoup aidé.

233voto

Nick Craver Points 313913

Appelez ceci avant la requête :

set define off;

Autre option, bricolage :

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

D'après Optimisation de SQL*Plus:

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

11 votes

Que fait (encore) set define off; ?

0 votes

SET DEFINE OFF: Commande "set define" non valide

16voto

diederikh Points 17459

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

2 votes

SET DEFINE ? supprime le comportement de substitution de variable dans SQL Developer 2.1. Comme l'a noté Nick, SET DEFINE OFF fonctionne également.

1 votes

Set define fonctionne mais le DBA ne permet pas parfois de l'utiliser, je ne sais pas pourquoi

0 votes

Ne fonctionne pas. Commande "set define" non valide

1voto

nikhil sugandh Points 665

Cela fonctionnera comme vous 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 votes

Ma question était de savoir comment cela pourrait être fait sans utiliser chr(38).

0 votes

@JanekBogucki prends-le c'est correct maintenant sans utiliser CHAR(38)

0 votes

J'ai donné une réponse différente car vous aviez déjà une réponse validée en vert mais vous l'avez réduite.

-3voto

Dinesh Garud Points 1

Désactiver le scan ; La commande ci-dessus fonctionne également.

0 votes

Cela ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire ci-dessous leur publication - vous pouvez toujours commenter vos propres publications, et une fois que vous avez acquis une réputation suffisante, vous pourrez commenter n'importe quelle publication. Si vous avez une question connexe mais différente, posez une nouvelle question en référençant celle-ci si cela peut aider à fournir du contexte.

-3voto

ufo2mstar Points 1

J'avais aussi des problèmes à 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 était de supprimer tout script de démarrage que vous auriez configuré !

par ex. Outils>Préférences...>Base de données et supprimez tout chemin de fichier que vous avez dans la zone de texte étiquetée "Nom de fichier pour script de démarrage de connexion"!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X