2010-09-08 6 views
3

j'ai une requêteOracle caractères spéciaux

select * from table where name in ('52 T&M', '60 T&M'); 

Le « & » est à l'origine de la requête d'attendre un paramètre. Comment puis-je qualifier le "&" dans la requête à piquer afin que la requête puisse trouver la chaîne avec le caractère "&" dedans?

+1

connexes: http://stackoverflow.com/questions/118190/how -do-i-ignore-ampersands-dans-un-sql-script-running-from-sql-plus –

+0

@ALL .... mon mauvais .... c'est dans une procédure Oracle 10g. Pas dans SQL Server .... Désolé – MikeTWebb

Répondre

4

Je normalement utiliser set define off comme suggéré par omg, mais il est aussi possible de le faire comme ceci:

select * 
from table 
where name in ('52 T'||Chr(38)||'M', '60 T'||Chr(38)||'M'); 
0

Je suppose que vous utilisez sqlplus, donc exécuter avant

set scan off

+0

@Michael .... la chaîne de requête est située dans la définition d'un curseur. J'ai essayé votre suggestion, mais je suspecte que la définition de CURSOR la ​​gâche – MikeTWebb

9

L'esperluette ("&") est un caractère interprété par SQLPlus comme un espace réservé variable. Utilisation:

SET DEFINE OFF 
+0

@OMG ... que se passe-t-il dans la procédure? Comme je le mentionne ci-dessous, la requête est dans un CURSOR degined avant le BEGIN dans la procédure – MikeTWebb

+0

@MikeTWebb: En haut du script. Je parie que c'est un bloc PLSQL anonyme ... –

+0

+1 J'ai appris quelque chose de nouveau aujourd'hui! @MikeTWebb Il irait comme la première ligne du script ou là abouts. Si le script définit une procédure, un corps de package ou une fonction via CREATE OR REPLACE .... ou si le script contient un bloc PL/SQL anonyme. –