gpt4 book ai didi

甲骨文 : Triggers inside a transaction (2 statements)

转载 作者:行者123 更新时间:2023-12-01 15:16:04 25 4
gpt4 key购买 nike

我正在开发 Oracle 10g DB,但事务内的触发器出现问题。表 A 有 3 个触发器:一个在插入之前,一个在更新之前,最后一个在删除之前。每当触发触发器时,它就会在表 B 上写入一行,就像某种日志一样。所有触发器均配置在“xxx 之前”“每行”。使用单个查询,我可以看到它们正在工作。

但是,当我在一个事务期间执行两个修改同一行的查询时(通常,我修改一行,然后删除它,因此一个更新和一个删除 ),仅运行第一个触发器(update)。事务结束时,我可以看到table A中的行已被删除,但table B中只有一行显示了更新操作,但没有显示删除一个。

我可能配置错误。它是来自触发器配置的东西吗?

最佳答案

第二个触发器没有理由不触发,还有其他事情发生。

下面是一个小测试用例,显示当单个事务多次修改单行时,所有触发器都会正确触发:

SQL> CREATE TABLE a (ID NUMBER);

Table created

SQL> CREATE TABLE b (action VARCHAR2(3), id_old NUMBER, id_new NUMBER);

Table created

SQL> CREATE TRIGGER trg_a_ins BEFORE INSERT ON a FOR EACH ROW
2 BEGIN
3 INSERT INTO b VALUES ('ins', :old.id, :new.id);
4 END;
5 /

Trigger created

SQL> CREATE TRIGGER trg_a_upd BEFORE UPDATE ON a FOR EACH ROW
2 BEGIN
3 INSERT INTO b VALUES ('upd', :old.id, :new.id);
4 END;
5 /

Trigger created

SQL> CREATE TRIGGER trg_a_del BEFORE DELETE ON a FOR EACH ROW
2 BEGIN
3 INSERT INTO b VALUES ('del', :old.id, :new.id);
4 END;
5 /

Trigger created

SQL> INSERT INTO a VALUES (1);

1 row inserted

SQL> UPDATE a SET ID = 2 WHERE ID = 1;

1 row updated

SQL> DELETE FROM a WHERE ID = 2;

1 row deleted

SQL> select * from b;

ACTION ID_OLD ID_NEW
------ ---------- ----------
ins 1
upd 1 2
del 2

关于甲骨文 : Triggers inside a transaction (2 statements),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6517892/

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