作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发 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/
我是一名优秀的程序员,十分优秀!