Question

Ok, c'est un peu d'une obscure question, mais j'espère que quelqu'un peut m'aider avec elle.

Le système que je suis en train de travailler sur construit une chaîne SQL dynamique pour exécution à l'intérieur d'une procédure stockée, et une partie de SQL dynamique de définir des alias de colonne, qui eux-mêmes sont en fait les valeurs récupérées à partir d'un autre tableau de données générées par des utilisateurs.

Ainsi, par exemple, la chaîne pourrait ressembler à quelque chose comme;

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

Cela fonctionne très bien.Toutefois, la valeur qui est utilisée pour l'alias peut potentiellement contenir un double guillemet, qui rompt l'extérieur des guillemets.J'ai pensé que je pouvais peut-être échapper à la double guillemets à l'intérieur de l'alias en quelque sorte, mais je n'ai pas eu la chance de trouver comment le faire.Barre oblique inverse ne fonctionne pas, et à l'aide de deux guillemets doubles dans une ligne de résultat dans cette erreur;

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

Quelqu'un a eu une expérience avec ce problème avant?Un grand bravo à toute réflexion quelqu'un a de.

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

Était-ce utile?

La solution

Pouvez-vous mettre un autre personnage au lieu de guillemets doubles et les remplacer avec 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 il y a un hack de toute façon.Le "gentil" façon serait de sélectionner les valeurs et les noms de colonne séparément et de les associer dans votre code.Qui rendrait les choses beaucoup plus propre.

Autres conseils

utiliser l'Oracle citation de l'opérateur:

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

le '#' peut être remplacé par n'importe quel caractère

Lorsque je l'exécute:

select 'test"columnname"' from dual

Oracle retourne ce (avis de l'Oracle généré nom de la colonne):

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

Le fait que l'Oracle du nom de la colonne ne comprennent pas mon double-quote me dit que l'Oracle ne peut probablement pas la représenter.

Meilleur pari pour autant que je peux voir, c'est de la bande de double-guillemets à partir de vos données avant d'utiliser des noms de colonnes.Malheureusement, ce sera également exiger que vous faites la même chose de filtrage lorsque vous sélectionnez ces colonnes, mais je ne vois pas une autre façon.

éventuellement, un domaine fécond de l'enquête serait de se pencher sur la citation de la méthode.

my $quotedString = $dbh->quote( $string );

Essayez ceci, deux guillemets simples ressemblent effectivement à une double citation de sortie:
select 1 as "University ''John Smith''" from dual;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top