Habituellement, vous n'effectuez pas de DDL (création, modification, suppression) dans votre procédure PL/SQL. Si vous avez besoin d'une table pour stocker des données temporaires, vous pouvez créer tables temporaires dans ce but. Dans votre cas, je créerais d'abord les tables
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;
Et puis la procédure ressemblerait à ceci
DECLARE
CURSOR CUR IS ...
BEGIN
FOR rec IN CUR
LOOP
--Do stuff here
END LOOP;
DELETE FROM T1;
DELETE FROM T2;
END;
/
Bien sûr, les tables ne seraient pas supprimées après cela, mais je suppose que vous souhaitez utiliser votre procédure PL/SQL régulièrement, pas une seule fois, n'est-ce pas ?
Si vous souhaitez toujours effectuer DDL dans votre procédure, vous devez utiliser SQL dynamique (exécution immédiate). Cependant, vous devez être conscient que les opérations DDL effectuent des validations implicites, de sorte que votre procédure ne serait pas une seule transaction atomique.