2009-05-19 11 views
7

Ich schreibe eine PL/SQL-Prozedur, die dynamisch einige Abfragen generieren muss, von denen eine das Erstellen einer temporären Tabelle mithilfe von Ergebnissen aus einer Abfrage, die als Parameter verwendet wird, umfasst.Warum führt das Ausführen dieser Abfrage mit EXECUTE IMMEDIATE zum Fehlschlagen?

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ühre, wird sie korrekt ausgeführt. An diesem Punkt kann ich feststellen, was das Problem verursacht.

+1

Ich hoffe, dass Proc nicht im normalen Ablauf von Ihrer Anwendung ausgeführt wird ... dynamische DDL ist nur wirklich für Admin-Skripts geeignet (z. B. Einrichten einer neuen Umgebung). –

Antwort

23

Versuchen Sie, das ";" innerhalb der Zeichenfolge, die Sie sofort ausführen.

Verwandte Themen