Mit der Anweisung EXECUTE IMMEDIATE wird eine dynamisch formulierte Anweisung in einem Schritt vorbereitet und ausgeführt. EXECUTE IMMEDIATE entspricht also einer PREPARE-Anweisung mit unmittelbar darauffolgender EXECUTE-Anweisung. Allerdings bleibt die Anweisung nicht vorbereitet und kann nicht mit EXECUTE nochmals ausgeführt werden.
Dynamisch formulierte CALL-Anweisungen können mit EXECUTE IMMEDIATE ausgeführt werden, wenn die aufzurufende Prozedur keine Prozedurparameter oder nur Prozedurparameter vom Typ IN besitzt.
EXECUTE IMMEDIATE
anweisungsvariable
anweisungsvariable ::= :
benutzervariable
anweisungsvariable
Alphanumerische Benutzervariable, die den Anweisungstext enthält. Für Benutzervariable ist auch ein Datentyp CHAR(n) zulässig, mit 256 <= n <= 32000.
Folgende Bedingungen müssen erfüllt sein:
Innerhalb des Anweisungstexts dürfen keine Benutzervariablen und keine Fragezeichen als Platzhalter für unbekannte Werte verwendet werden.
Der Anweisungstext darf weder SQL-Kommentare noch Kommentare der Wirtssprache enthalten. Ausnahmen sind Pragmas (--%PRAGMA).
Der Anweisungstext darf keine SELECT-Anweisung und keine Cursorbeschreibung sein.
Bei einer INSERT-Anweisung darf die RETURN INTO-Klausel nicht angegeben werden.
Enthält der Anweisungstext einen Cursornamen (DELETE WHERE CURRENT OF, UPDATE WHERE CURRENT OF), muss die Cursorbeschreibung für diesen Cursor bei Ausführung der EXECUTE IMMEDIATE-Anweisung vorbereitet und der Cursor geöffnet sein.
Anweisungen für EXECUTE IMMEDIATE
Folgende Anweisungen können mit EXECUTE IMMEDIATE ausgeführt werden:
ALTER SPACE ALTER STOGROUP ALTER TABLE COMMIT CALL (nur Eingabeparameter; Typ IN) CREATE INDEX CREATE FUNCTION CREATE PROCEDURE CREATE SCHEMA CREATE SPACE CREATE STOGROUP CREATE SYSTEM_USER CREATE TABLE CREATE USER CREATE VIEW DELETE DROP FUNCTION DROP INDEX DROP PROCEDURE | DROP SCHEMA DROP SPACE DROP STOGROUP DROP SYSTEM_USER DROP TABLE DROP USER DROP VIEW GRANT INSERT (ohne RETURN INTO-Klausel) MERGE PERMIT REORG STATISTICS REVOKE ROLLBACK SET CATALOG SET SCHEMA SET SESSION AUTHORIZATION SET TRANSACTION UPDATE |
Daneben können auch alle Utility-Anweisungen mit EXECUTE IMMEDIATE ausgeführt werden (siehe Handbuch „ SQL-Sprachbeschreibung Teil 2: Utilities“).
Folgende Anweisungen können nicht mit EXECUTE IMMEDIATE ausgeführt werden:
ALLOCATE DESCRIPTOR CLOSE DEALLOCATE DESCRIPTOR DECLARE CURSOR DESCRIBE EXECUTE EXECUTE IMMEDIATE FETCH GET DESCRIPTOR | INCLUDE OPEN PREPARE RESTORE SELECT SET DESCRIPTOR STORE WHENEVER |
Beispiel
Zur Laufzeit soll eine SQL-Anweisung mit EXECUTE IMMEDIATE übersetzt und ausgeführt werden:
In SOURCESTMT wird die folgende SQL-Anweisung als alphanumerische Zeichenkette eingelesen:
CREATE TABLE auftragkunden.auftragsver.aufstat
(astnr INTEGER, astxt CHAR(15))
Die Anweisung wird übersetzt und ausgeführt mit:
EXEC SQL EXECUTE IMMEDIATE :SOURCESTMT END-EXEC
Siehe auch
EXECUTE, PREPARE