sql >> Database teknologi >  >> RDS >> Oracle

Opret orakelbord med automatisk commit til

Det er muligt at bruge en autonom transaktion.

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

Kør derefter denne anonyme PL/SQL. Se godt efter, den lokale procedure upd_table_3 køres ikke, når den er deklareret. Den køres, når den kaldes inden for BEGIN blokere:

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

Proceduren skulle fejle med vilje på den 4. indsættelse med ORA-02291 . Jeg gjorde det på denne måde. Så

ROLLBACK;

Alle tabeller skal rulles tilbage undtagen t3 , som vi indsatte i en selvstændig transaktion.

SELECT * FROM t1;

no rows selected

SELECT * FROM t2;

no rows selected

SELECT * FROM t3;

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

SELECT * FROM t4;

no rows selected


  1. Tæl fra en tabel, men stop med at tælle ved et bestemt tal

  2. T-SQL for at finde Remote Server Name på den linkede server

  3. Hvorfor kan der kun være én TIMESTAMP-kolonne med CURRENT_TIMESTAMP i DEFAULT-sætning?

  4. SQL-funktionsproblem Den sidste sætning inkluderet i en funktion skal være en retursætning