Frage

Ok, das ist etwas obskure Frage, aber ich hoffe, jemand kann mir helfen mit es.

Das system arbeite ich auf baut eine dynamische SQL-string für die Ausführung innerhalb einer gespeicherten Prozedur, und ein Teil dieses dynamischen SQL-Definition der Spalte Aliasnamen, die sich tatsächlich abgerufenen Werte aus einer anderen Tabelle der Benutzer-generierten Daten.

So, zum Beispiel, der string könnte so Aussehen;

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

Dies funktioniert gut.Allerdings ist der Wert, der verwendet wird, für den alias können Sie möglicherweise enthalten eine doppelte Anführungszeichen, bricht die äußeren Anführungszeichen.Ich dachte, ich könnte vielleicht entkommen doppelten Anführungszeichen innerhalb des alias irgendwie, aber ich hatte kein Glück herauszufinden, wie Sie dies tun.Umgekehrter Schrägstrich funktioniert nicht, und mit zwei doppelten Anführungszeichen in einer Zeile führt 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 vor?Prost für jede Einsicht jedermann hat.

p.en.die Anführungszeichen sind erforderlich, um die Aliase, da Sie Leerzeichen enthalten kann.

War es hilfreich?

Lösung

Können Sie legen Sie einfach ein anderes Zeichen anstelle von doppelten Anführungszeichen und ersetzen Sie ihn mit doppelten Anführungszeichen im code?

So etwas wie dieses:

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

Dann ersetzen Sie einfach | mit ".

Ich weiß, es ist ein hack, aber ich kann nicht glauben, eine bessere Lösung...Und was Sie dort tun, ist ein hack sowieso.Der "schöne" Weg wäre, um die Werte auswählen und den Namen der Spalten getrennt, und ordnen Sie diese in Ihrem code.Das würde die Dinge viel sauberer.

Andere Tipps

verwenden Sie die Oracle-Zitat Betreiber:

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

das '#' ersetzt werden kann durch ein beliebiges Zeichen

Wenn ich dies ausführen:

select 'test"columnname"' from dual

Oracle gibt diese (beachten Sie die Oracle-generierten Spalte name):

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

Die Tatsache, dass Oracle die Spalte name nicht meine Doppel-quote sagt mir, dass Oracle wohl nicht darstellen.

Beste Wette so weit wie ich sehen kann, ist die doppelte-Zitate von Ihren Daten vor der Verwendung von Spaltennamen.Leider wird auch erfordern, dass Sie das gleiche tun filtern, wenn Sie wählen Sie diese Spalten, aber ich sehe keine andere Möglichkeit.

eine eventuell fruchtbare Gebiet der Untersuchung sei der Blick in das zitieren Methode.

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

Versuchen Sie, diese zwei einfachen Anführungszeichen tatsächlich Aussehen wie eine doppelte Anführungszeichen in der Ausgabe:
select 1 as "University ''John Smith''" from dual;

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top