2008-09-11 10 views
5

Ok, das ist ein bisschen eine obskure Frage, aber hoffentlich kann mir jemand damit helfen.Doppelzitate in Oracle Spalten Aliasse

Das System, an dem ich arbeite, erstellt eine dynamische SQL-Zeichenfolge für die Ausführung in einer gespeicherten Prozedur und einen Teil dieser dynamischen SQL-definierenden Spaltenaliase, die selbst Werte aus einer anderen Tabelle mit vom Benutzer generierten Daten sind.

So könnte zum Beispiel die Zeichenfolge so aussehen;

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

Das funktioniert gut. Der Wert, der für den Alias ​​verwendet wird, kann jedoch ein Anführungszeichen enthalten, wodurch die äußeren Anführungszeichen gebrochen werden. Ich dachte, ich könnte vielleicht doppelte Anführungszeichen innerhalb des Alias ​​irgendwie entkommen, aber ich hatte kein Glück, herauszufinden, wie es geht. Backslash funktioniert nicht, und zwei doppelte Anführungszeichen in einer Zeile führen zu diesem Fehler;

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

Hat jemand schon Erfahrung mit diesem Problem gehabt? Prost für jede Einsicht, die jemand hat.

p.s. Die Anführungszeichen werden um die Aliase benötigt, da sie Leerzeichen enthalten können.

Antwort

4

Können Sie einfach ein anderes Zeichen anstelle von Anführungszeichen setzen und dieses durch doppelte Anführungszeichen im Code ersetzen?

Etwas wie folgt aus:

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

Dann einfach ersetzen | mit ".

Ich weiß, es ist ein Hack, aber ich kann mir keine bessere Lösung vorstellen ... Und was du da machst, ist sowieso ein Hack. Der" nette "Weg wäre die Auswahl der Werte und der Spaltennamen getrennt und ordnen Sie sie in Ihrem Code an. Das würde Dinge viel sauberer machen.

1

Wenn ich laufe dies:

select 'test"columnname"' from dual 

Oracle gibt diesen (man beachte den Oracle-generierte Spaltennamen):

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

Die Tatsache, dass Oracle Spaltenname nicht meine doppelten Anführungszeichen enthält sagt mir, dass Oracle das wahrscheinlich nicht darstellen kann.

Die beste Wette, soweit ich sehen kann, ist doppelte Anführungszeichen aus Ihren Daten zu streichen, bevor Sie Spaltennamen verwenden. Leider erfordert dies auch, dass Sie die gleiche Filterung durchführen, wenn Sie diese Spalten auswählen, aber ich sehe keinen anderen Weg.

0

ein möglicherweise fruchtbarer Bereich der Untersuchung würde sein, in die Zitatmethode zu schauen.

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

2

Verwendung der Oracle-Zitat Betreiber:

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

die '#' kann von jedem Charakter

0

Try this ersetzt werden, zwei einfache Anführungszeichen tatsächlich aussehen wie ein doppeltes Anführungszeichen in Ausgabe:
select 1 as "University ''John Smith''" from dual;