Comment ignorer les esperluettes dans un script SQL exécuté à partir de SQL Plus?
Question
J'ai un script SQL qui crée un package avec un commentaire contenant une esperluette (& amp;). 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 & Amp ;. Comment puis-je désactiver cette fonctionnalité pour que SQL Plus ignore la perluète?
La solution
Cela peut fonctionner pour vous:
set define off
Sinon, l'esperluette doit être à la fin d'une chaîne,
'StackOverflow &' || ' you'
EDIT: J'étais content au clic lors de la sauvegarde ... Ceci a été référencé depuis un blog .
Autres conseils
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 depuis son équivalent numérique, comme dans || Chr(38) ||
, ou l'ajouter sous la forme d'un seul caractère, comme dans || '&' ||
.
J'ai résolu le problème avec le code ci-dessous:
set escape on
et mettez un \ à côté de & amp; à gauche 'value_\&_intert'
Att
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 la touche SET DEFINE <1_CHARACTER>
Par défaut, la fonction DEFINE elle-même est activée et elle est définie sur & et
.Il peut être désactivé - comme mentionné précédemment - mais il peut également être évité en le réglant à 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>
définir définir off < - Ceci est la meilleure solution que j'ai trouvé
J'ai aussi essayé ...
set define}
J'ai pu insérer plusieurs enregistrements contenant des caractères «et commercial», & amp; ' mais je ne peux pas utiliser le caractère '}' dans le texte J'ai donc décidé d'utiliser & Quot; set define off & Quot; et tout fonctionne comme il se doit.
Selon cette belle FAQ , il existe un couple solutions.
Vous pourrez peut-être également échapper l'esperluette avec le caractère barre oblique inversée \
si vous pouvez modifier le commentaire.
J'ai eu une instruction CASE avec WHEN column = 'sometext & amp; plus de texte 'ALORS ....
Je l'ai remplacé par QUAND colonne = 'sometext' || CHR (38) || 'plus de texte' ALORS ...
vous pouvez aussi utiliser QUAND colonne LIKE 'sometext _ plus de texte' ALORS ...
(_ est le caractère générique pour un seul caractère)