Oracle
 sql >> база данни >  >> RDS >> Oracle

Създайте таблица на oracle с включено автоматично ангажиране

Възможно е с помощта на автономна транзакция.

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

След това стартирайте този анонимен PL/SQL. Погледнете внимателно локалната процедура upd_table_3 не се изпълнява, когато е деклариран. Изпълнява се при извикване в рамките на главния BEGIN блокиране:

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

Процедурата трябва да се провали умишлено при 4-то вмъкване с ORA-02291 . Направих го по този начин. След това

ROLLBACK;

Всички таблици трябва да бъдат върнати назад с изключение на t3 , което вмъкнахме в автономна транзакция.

SELECT * FROM t1;

no rows selected

SELECT * FROM t2;

no rows selected

SELECT * FROM t3;

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

SELECT * FROM t4;

no rows selected


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете меню в SQLPlus или PL/SQL

  2. Групиране по псевдоним (Oracle)

  3. Как да укажа списък с променливи изрази в Pro*C заявка?

  4. Повтарящи се стойности в колона

  5. ORA-00604 ORA-12705