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

Crear una tabla de Oracle con confirmación automática activada

Es posible usando una Transacción Autónoma.

CREATE TABLE t1 (x INTEGER PRIMARY KEY);
CREATE TABLE t2 (x INTEGER);
CREATE TABLE t3 (x INTEGER);
CREATE TABLE t4 (x INTEGER REFERENCES t1(x));

Luego ejecute este PL/SQL anónimo. Fíjese bien, el procedimiento local upd_table_3 no se ejecuta cuando se declara. Se ejecuta cuando se llama dentro del BEGIN principal bloque:

DECLARE 
  PROCEDURE upd_table_3 IS
  PRAGMA AUTONOMOUS_TRANSACTION;
  BEGIN
    INSERT INTO t3 VALUES (3);
    COMMIT;
  END;
BEGIN
  INSERT INTO t1 VALUES (1);
  INSERT INTO t2 VALUES (2);
  upd_table_3;
  INSERT INTO t4 VALUES (4);
  COMMIT;
END;
/

El procedimiento debería fallar intencionalmente en la cuarta inserción con ORA-02291 . Lo hice de esta manera. Entonces

ROLLBACK;

Todas las tablas deben revertirse excepto t3 , que hicimos la inserción en una transacción autónoma.

SELECT * FROM t1;

no rows selected

SELECT * FROM t2;

no rows selected

SELECT * FROM t3;

         X
----------
         3

SELECT * FROM t4;

no rows selected