Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle PL/SQL Criando tabelas no cursor?


Normalmente você não executa DDLs (criar, alterar, descartar) dentro de seu procedimento PL/SQL. Se você precisar de uma tabela para armazenar alguns dados temporários, poderá criar tabelas temporárias para este fim. No seu caso eu primeiro criaria as tabelas
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 então o procedimento ficaria assim
DECLARE
CURSOR CUR IS ...
BEGIN
       FOR rec IN CUR
       LOOP
       --Do stuff here
         END LOOP;

DELETE FROM T1;
DELETE FROM T2;
END;
/

Claro que as tabelas não seriam descartadas depois disso, mas suponho que você queira usar seu procedimento PL/SQL regularmente, não apenas uma vez, certo?

Se você ainda deseja executar DDL em seu procedimento, deve usar sql dinâmico (executar imediatamente). No entanto, você deve estar ciente de que as operações DDL executam confirmações implícitas, portanto, seu procedimento não seria uma única transação atômica.