web-dev-qa-db-fra.com

Comment ignorer les esperluettes dans un script SQL exécuté à partir de SQL Plus?

J'ai un script SQL qui crée un package avec un commentaire contenant une esperluette (&). Lorsque j'exécute le script à partir de SQL Plus, je suis invité à entrer une valeur de remplacement pour la chaîne commençant par &. Comment désactiver cette fonctionnalité pour que SQL Plus ignore la perluète?

94
JoshL

Cela peut fonctionner pour vous:

set define off

Sinon, l'esperluette doit être à la fin d'une chaîne, 

'StackOverflow &' || ' you'

EDIT: J'étais satisfait du clic lors de la sauvegarde ... Cela a été référencé depuis un blog .

161
Austin Salonen

Si vous utilisez parfois des variables de substitution, vous ne voudrez peut-être pas désactiver la définition. Dans ces cas, vous pouvez convertir l'esperluette à partir de son équivalent numérique comme dans || Chr(38) || ou l'ajouter sous la forme d'un seul caractère comme dans || '&' ||.

23
Leigh Riffel

J'ai résolu avec le code ci-dessous:

set escape on

et mettez un\à côté de & à gauche 'value_\&_intert'

Att

11
Cauca

Vous pouvez définir le caractère spécial recherché lors de l'exécution d'un script sur une autre valeur à l'aide de SET DEFINE <1_CHARACTER>

Par défaut, la fonction DEFINE elle-même est activée et définie sur et

Comme vous l'avez déjà mentionné, il peut être désactivé, mais vous pouvez également l'éviter en lui attribuant une valeur différente. Soyez très conscient du signe que vous avez défini. Dans l'exemple ci-dessous, j'ai choisi le caractère #, mais ce choix n'est qu'un exemple.

SQL> select '&var_ampersand #var_hash' from dual;
Enter value for var_ampersand: a value

'AVALUE#VAR_HASH'
-----------------
a value #var_hash

SQL> set define #
SQL> r
  1* select '&var_ampersand #var_hash' from dual
Enter value for var_hash: another value

'&VAR_AMPERSANDANOTHERVALUE'
----------------------------
&var_ampersand another value

SQL>
6
tvCa

set define off <- C’est la meilleure solution que j’ai trouvée

J'ai aussi essayé ...

définir définir} 

J'ai pu insérer plusieurs enregistrements contenant des caractères esperluette '&' mais je ne peux pas utiliser le caractère '}' dans le texte.

3
ora

Selon ce Nice FAQ il y a plusieurs solutions.

Vous pouvez également être en mesure d'échapper à l'esperluette avec le caractère barre oblique inverse \ si vous pouvez modifier le commentaire.

2
user19387

J'avais une déclaration CASE avec WHEN column = 'sometext & more text' THEN ....

Je l'ai remplacé par WHEN column = 'sometext' || CHR (38) || 'plus de texte' ALORS ...

vous pouvez également utiliser QUAND colonne LIKE 'sometext _ more text' THEN ...

(_ est le caractère générique pour un seul caractère)

0
AWOLKiwi