gpt4 book ai didi

oracle - 创建自动提交的 oracle 表

转载 作者:行者123 更新时间:2023-12-01 11:38:41 25 4
gpt4 key购买 nike

这是场景,我正在编写一个对多个表执行 DML(插入、删除)操作的过程。万一出现异常,我需要从除一个表之外的大多数表中回滚数据。

例子:

过程{

1 Insert into table1

2 Delete from table2

3 Insert into Table3

4 Insert into table4

Commit;

异常

Rollback;

如果第 4 次插入有任何异常,我需要回滚除第 3 次之外的所有先前事务。我知道,提交/回滚不是那样工作的。但也许在创建 table3 时有办法,我可以设置一些参数,以便自动提交 table3 上的每个 INSERT 语句。

最佳答案

使用自治事务是可能的。

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 block 中调用时运行:

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

关于oracle - 创建自动提交的 oracle 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24419183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com