Gewoonlijk voert u geen DDL's (creëren, wijzigen, neerzetten) uit binnen uw PL/SQL-procedure. Als je een tabel nodig hebt om tijdelijke gegevens op te slaan, kun je tijdelijke tabellen Voor dit doeleinde. In jouw geval zou ik eerst de tabellen maken
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;
En dan ziet de procedure er zo uit
DECLARE
CURSOR CUR IS ...
BEGIN
FOR rec IN CUR
LOOP
--Do stuff here
END LOOP;
DELETE FROM T1;
DELETE FROM T2;
END;
/
Natuurlijk zouden de tabellen daarna niet meer worden verwijderd, maar ik neem aan dat u uw PL/SQL-procedure regelmatig wilt gebruiken, niet slechts één keer, toch?
Als u nog steeds DDL in uw procedure wilt toepassen, moet u dynamische sql (direct uitvoeren). U moet zich er echter van bewust zijn dat DDL-bewerkingen impliciete commits uitvoeren, dus uw procedure zou geen enkele atomaire transactie zijn.