Normalerweise führen Sie keine DDLs (Erstellen, Ändern, Löschen) innerhalb Ihrer PL/SQL-Prozedur aus. Wenn Sie eine Tabelle zum Speichern temporärer Daten benötigen, können Sie temporäre Tabellen für diesen Zweck. In Ihrem Fall würde ich zuerst die Tabellen erstellen
CREATE GLOBAL TEMPORARY TABLE T1
(
col1 VARCHAR2(128),
col2 VARCHAR2(128),
col3 NUMBER(3) NOT NULL,
col3 FLOAT(100)
);
CREATE GLOBAL TEMPORARY TABLE T2 AS
SELECT * FROM other_table WHERE 1 = 0;
Und dann würde die Prozedur so aussehen
DECLARE
CURSOR CUR IS ...
BEGIN
FOR rec IN CUR
LOOP
--Do stuff here
END LOOP;
DELETE FROM T1;
DELETE FROM T2;
END;
/
Natürlich würden die Tabellen danach nicht gelöscht, aber ich nehme an, Sie möchten Ihre PL/SQL-Prozedur regelmäßig verwenden, nicht nur einmal, oder?
Wenn Sie dennoch DDL in Ihrem Verfahren ausführen möchten, müssen Sie dynamisches SQL (sofort ausführen). Sie müssen sich jedoch darüber im Klaren sein, dass DDL-Operationen implizite Festschreibungen ausführen, sodass Ihre Prozedur keine einzelne atomare Transaktion wäre.