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

Créer une table oracle avec auto commit activé

C'est possible en utilisant une Transaction Autonome.

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));

Ensuite, exécutez ce PL/SQL anonyme. Regardez bien, la procédure locale upd_table_3 n'est pas exécuté lorsqu'il est déclaré. Il est exécuté lorsqu'il est appelé dans le BEGIN principal bloquer :

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;
/

La procédure doit échouer intentionnellement au 4ème insert avec ORA-02291 . Je l'ai fait de cette façon. Alors

ROLLBACK;

Toutes les tables doivent être restaurées sauf t3 , dont nous avons fait l'insertion dans une transaction autonome.

SELECT * FROM t1;

no rows selected

SELECT * FROM t2;

no rows selected

SELECT * FROM t3;

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

SELECT * FROM t4;

no rows selected