sql >> Databasteknik >  >> RDS >> Oracle

Skapa orakelbord med automatisk commit på

Det är möjligt att använda 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 sedan denna anonyma PL/SQL. Titta noga, den lokala proceduren upd_table_3 körs inte när den deklareras. Den körs när den anropas inom huvudkoden BEGIN blockera:

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 bör misslyckas avsiktligt på den 4:e infogningen med ORA-02291 . Jag gjorde det så här. Sedan

ROLLBACK;

Alla tabeller bör rullas tillbaka utom t3 , som vi infogade i en autonom 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. Om hur man skapar i Oracle Express - SQL. En utlösare för att uppdatera en kolumn

  2. Twitter bootstrap typahead returnerar flera värden och fyller i redigeringsrutan

  3. Korskoppling mellan flera scheman i MySQL. Privilegier och prestanda

  4. Generera tabellrelationsdiagram från befintligt schema (SQL Server)