web-dev-qa-db-fra.com

Escape esperluette dans les développeurs PL/SQL

J'essaie une simple instruction INSERT sur une base de données Oracle. L’une des valeurs est un champ VARCHAR2 et l’instruction insert contient une esperluette. Comment puis-je faire cela? J'ai essayé les méthodes suivantes:

  1. Escape the & as\& with set escape on
  2. désactiver l'analyse (une erreur d'option ORA-00922 est manquante ou non valide)
  3. set define off (cela entraîne une erreur d'option manquante ou non valide pour ORA-00922)

D'autres idées?

21
Ray Booysen

Comment j’ai résolu le problème, c’est de fuir le & avec un autre et.

Par exemple:

INSERT INTO Foo (Bar) VALUES ('Up && Away');

Fonctionne bien. Merci pour votre aide

24
Ray Booysen

La version actuelle de PL/SQL Developer (11.0.x) comporte un bouton pour activer/désactiver les variables de substitution.

 enter image description here

21
William Robertson

Une des fonctionnalités de PL/SQL Developer avec laquelle il faut du temps pour se familiariser est la pléthore de différents types de fenêtres. 

L'un d'eux est la fenêtre COMMAND, qui est essentiellement un émulateur SQL * Plus. Nous pouvons exécuter des commandes SQL * Plus ainsi que SQL, afin que SET ESCAPE, SET DEFINE et même SET SCAN OFF fonctionnent dans cette fenêtre. 

12
APC

Avez-vous essayé quelque chose comme ça?

INSERT INTO tablex VALUES ('Sid ' || '&' || ' Nancy');

En améliorant ma première réponse, votre problème est lié à PL/SQL Developer. Si vous exécutez votre bloc dans une fenêtre de commande de développeur PL/SQL, vous pouvez également utiliser la définition standard SET DEFINE OFF, qui fonctionne de la même manière que dans SQL * Plus.

8
Aitor

le concat a parfaitement fonctionné pour moi ci-dessous est ce que j'ai fait dans ma déclaration choisie:

select FUND_NM
FROM PERFORMANCE
WHERE upper(FUND_DESC) in ('My L&' ||'L FUNDS')
4
NSC

J'utilise chr(38) où j'ai besoin d'une esperluette en PL/SQL.

addr:= 'mysite.com/order.aspx?no=5678' || CHR(38) || 'id=947';
--above line gives you 'mysite.com/order.aspx?no=5678&id=947';
3
mason

Ceci est juste un problème de l'éditeur SQL. Pour résoudre ce problème, il suffit de compiler la procédure avec SET DEFINE OFF; . L'exécution qui est PL (en cours d'exécution sur le serveur) n'aura pas ce problème.

1
Saurabh Srivastava