Ash*_*gan 2 oracle triggers transactions oracle10g
我正在研究Oracle 10g数据库,我在事务中遇到了触发器问题.
Table A有3个触发器:一个在插入之前,一个在更新之前,最后一个在删除之前 每当触发器触发时,它都会写入一行table B,就像某种日志一样.所有触发器都配置为"before xxx"和"on each row".使用单个查询,我可以看到它们正在工作.
但是当我在一次事务中执行两次查询修改同一行时(通常,我修改一行然后我删除它,所以a update和a delete),只update运行第一个trigger().在交易结束时,我可以看到我的线路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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2379 次 |
| 最近记录: |