Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle PL/SQL Créer des tables dans le curseur ?

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.