Warum läuft diese Abfrage mit EXECUTE IMMEDIATE weil es zum Scheitern verurteilt?
-
23-08-2019 - |
Frage
Ich bin ein PL / SQL-Prozedur zu schreiben, die dynamisch muss, um einige Abfragen zu generieren, von denen eine temporäre Tabelle beinhaltet aus einer Abfrage als Parameter verwenden Ergebnisse zu schaffen.
CREATE OR REPLACE PROCEDURE sqlout(query IN VARCHAR2)
IS
BEGIN
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ');';
END;
Es kompiliert richtig, aber auch mit sehr einfachen Abfragen wie mit:
BEGIN
sqlout('SELECT * FROM DUAL');
END;
IT wirft ORA-00911: invalid character
. Wenn ich die erstellte Abfrage manuell ausführen läuft es richtig. An diesem Punkt bin ich in der Lage zu bestimmen, was das Problem verursacht.
Lösung
Versuchen Sie, die verlieren „;“ von innen, dass Sie die Zeichenfolge Execute Immediate.
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow