Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle PL/SQL Creazione di tabelle nel cursore?

Di solito non esegui DDL (crea, alter, drop) all'interno della tua procedura PL/SQL. Se hai bisogno di una tabella per memorizzare alcuni dati temporanei, puoi creare tabelle temporanee per questo scopo. Nel tuo caso creerei prima le tabelle

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;

E poi la procedura sarebbe simile a questa

DECLARE
CURSOR CUR IS ...
BEGIN
       FOR rec IN CUR
       LOOP
       --Do stuff here
         END LOOP;

DELETE FROM T1;
DELETE FROM T2;
END;
/

Ovviamente le tabelle non verrebbero eliminate dopo, ma suppongo che tu voglia usare la tua procedura PL/SQL regolarmente, non solo una volta, giusto?

Se desideri comunque eseguire DDL nella tua procedura, devi utilizzare sql dinamico (eseguire immediatamente). Tuttavia devi essere consapevole del fatto che le operazioni DDL eseguono commit impliciti, quindi la tua procedura non sarebbe una singola transazione atomica.