sql >> Base de Datos >  >> RDS >> Oracle

Oracle PL/SQL ¿Creando tablas en el cursor?

Por lo general, no realiza DDL (crear, modificar, eliminar) dentro de su procedimiento PL/SQL. Si necesita una tabla para almacenar algunos datos temporales, puede crear mesas temporales para este propósito. En tu caso, primero crearía las tablas

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;

Y luego el procedimiento se vería así

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

DELETE FROM T1;
DELETE FROM T2;
END;
/

Por supuesto, las tablas no se eliminarán después de eso, pero supongo que querrá usar su procedimiento PL/SQL regularmente, no solo una vez, ¿verdad?

Si aún desea realizar DDL en su procedimiento, debe usar sql dinámico (ejecutar inmediatamente). Sin embargo, debe tener en cuenta que las operaciones DDL realizan confirmaciones implícitas, por lo que su procedimiento no sería una sola transacción atómica.