2012-04-05 7 views
2

Ist es möglich, einige SQL-Befehle innerhalb eines EXECUTE IMMEDIATE-Blocks auszuführen?EXECUTE IMMEDIATE 'einige Befehle'

Was ist falsch mit dieser Syntax:

declare 
    pragma autonomous_transaction; 
begin   
    execute immediate 
    'begin 
     COMMENT ON TABLE t1 IS ''description1''; 
     COMMENT ON TABLE t2 IS ''description2'';    
    end;'; 
end; 

Für einen SQL-Befehl funktioniert es gut:

declare 
    pragma autonomous_transaction; 
begin   
    execute immediate ' COMMENT ON TABLE t1 IS ''description1'' '; 
end; 
+2

Warum müssen Sie es in einer einzigen Anweisung tun? –

+0

Welchen Fehler bekommen Sie? –

+0

Die Ausführung in einer einzelnen Anweisung erfordert weniger Refactoring. – Nikita

Antwort

5

Die beginend innerhalb der Zeichenfolge sofort ausführen wird als PL behandelt werden/SQL anonymer Block. DDL, wie COMMENT ist in PL/SQL nicht erlaubt. Wenn es wäre, müssten Sie nicht sofort ausführen ausführen. Oracle arbeitet im Wesentlichen entweder mit einem Block einer PL/SQL-Anweisung oder einer einzelnen SQL-Anweisung gleichzeitig. Es gibt jedoch auch APIs für Batch-SQL-Anweisungen.

Um also COMMENT innerhalb eines PL/SQL-Blocks oder einer PL/SQL-Prozedur auszuführen, müssen Sie die Anweisungen eingeben.

Ohne mehr Kontext kann ich nicht intelligent kommentieren, ob das der richtige Ansatz ist, oder ob es einfach besser wäre, nur die beiden Kommentaraussagen alleine zu haben.

+0

Vielen Dank! Wenn ich richtig verstehe, gibt es keine solche Abfrage, um einige Tabellen innerhalb eines sofortigen Bloks zu kommentieren. – Nikita

+0

Sie verstehen. –

1

Nun, man könnte dies tun:

begin   
    execute immediate 
    'begin 
     execute immediate ''COMMENT ON TABLE t1 IS ''''description1'''' ''; 
     execute immediate ''COMMENT ON TABLE t2 IS ''''description2'''' ''; 
    end;'; 
end; 

Aber es gibt nicht viel Sinn.

Verwandte Themen