2008-09-11 18 views
5

Ok, c'est un peu une question obscure, mais j'espère que quelqu'un peut m'aider avec.Double guillemets dans les alias de colonne Oracle

Le système sur lequel je travaille crée une chaîne SQL dynamique à exécuter dans une procédure stockée et une partie de ces alias de colonne SQL dynamiques définissant eux-mêmes des valeurs extraites d'une autre table de données générées par l'utilisateur. Ainsi, par exemple, la chaîne peut ressembler à quelque chose;

SELECT table1.Col1 AS "This is an alias" FROM table1 

Cela fonctionne très bien. Cependant, la valeur utilisée pour l'alias peut potentiellement contenir un double guillemet, qui casse les guillemets externes. Je pensais que je pourrais peut-être échapper à des doubles guillemets dans l'alias d'une manière ou d'une autre, mais je n'ai eu aucune chance de trouver comment le faire. Backslash ne fonctionne pas, et l'utilisation de deux guillemets doubles dans une ligne entraîne cette erreur;

SQL Error: ORA-03001: unimplemented feature 
03001. 00000 - "unimplemented feature" 
*Cause: This feature is not implemented. 

Est-ce que quelqu'un avait déjà eu cette expérience? Bravo pour tout aperçu que tout le monde a.

p.s. les guillemets sont nécessaires autour des alias car ils peuvent contenir des espaces.

Répondre

4

Pouvez-vous simplement mettre un autre caractère au lieu de guillemets et le remplacer par des guillemets dans le code?

Quelque chose comme ceci:

SELECT table1.Col1 AS "This is |not| an alias" FROM table1 

Ensuite, il suffit de remplacer | avec "

Je sais que c'est un hack, mais je ne peux pas penser à une meilleure solution ... Et ce que vous faites là est un hack de toute façon.Le" gentil "moyen serait de sélectionner les valeurs et les noms de colonne séparément et les associer dans votre code.Cela rendrait les choses beaucoup plus propres

1

Quand je lance ceci:

select 'test"columnname"' from dual 

Oracle renvoie cette (notez le nom de colonne généré par Oracle):

'TESTCOLUMNNAME' 
-------------------------------- 
test"columnname 

Le fait que le nom de la colonne d'Oracle ne comprend pas mon guillemet me dit que Oracle ne peut probablement pas représenter cela.

Le meilleur pari que je puisse voir est de supprimer les guillemets de vos données avant d'utiliser les noms de colonnes. Malheureusement, cela exigera également que vous fassiez le même filtrage lorsque vous sélectionnez ces colonnes, mais je ne vois pas une autre façon.

0

Un domaine d'investigation peut-être fructueux serait d'examiner la méthode de citation.

mon $ quoteString = $ dbh-> quote ($ chaîne);

2

L'opérateur de devis Oracle:

select q'#someone's quote#' from dual; 

le '#' peut être remplacé par un caractère

0

Essayez cela, deux guillemets simples ressemblent vraiment à une double citation de la production:
select 1 as "University ''John Smith''" from dual;