Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Erstellen Sie eine Oracle-Tabelle mit aktiviertem Auto-Commit

Es ist möglich, eine autonome Transaktion zu verwenden.

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

Führen Sie dann dieses anonyme PL/SQL aus. Schauen Sie genau hin, die lokale Prozedur upd_table_3 wird nicht ausgeführt, wenn es deklariert ist. Es wird ausgeführt, wenn es innerhalb des Haupt-BEGIN aufgerufen wird blockieren:

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

Die Prozedur sollte absichtlich beim 4. Einfügen mit ORA-02291 fehlschlagen . Ich habe es so gemacht. Dann

ROLLBACK;

Alle Tabellen außer t3 sollten zurückgesetzt werden , die wir in einer autonomen Transaktion eingefügt haben.

SELECT * FROM t1;

no rows selected

SELECT * FROM t2;

no rows selected

SELECT * FROM t3;

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

SELECT * FROM t4;

no rows selected