本周我有一个问题(幸好我解决了一个更好的方法);有趣的数据库触发器和RDB中的递归
- 我需要保持数据库中的几个字段常量。
所以,我敲了一个脚本来放置触发在桌子上,将设定值回预设数量时,无论是插入或更新发生。
数据库是在VMS上运行的RDB(但我很想知道SQLServer的相似之处)。
这里是触发:
drop trigger my_ins_trig;
drop trigger my_upd_trig;
!
!++ Create triggers on MY_TABLE
CREATE TRIGGER my_ins_trig AFTER INSERT ON my_table
WHEN somefield = 2
(UPDATE my_table table1
SET table1.field1 = 0.1,
table1.field2 = 1.2
WHERE my_table.dbkey = table1.dbkey)
FOR EACH ROW;
CREATE TRIGGER my_upd_trig AFTER UPDATE ON my_table
WHEN somefield = 2
(UPDATE my_table table1
SET table1.field1 = 0.1,
table1.field2 = 1.2
WHERE my_table.dbkey = table1.dbkey)
FOR EACH ROW;
提问时间
我希望它可以形成一个无限递归 - 但它似乎没有? 任何人都可以向我解释RDB如何处理这种或那种...或其他数据库如何处理它。
[注意:我知道这是一个可怕的方法,但各种问题和复杂性意味着即使这在代码中很简单 - 它无法做到最好/最简单的方式。幸运的是我没有以这种方式实现它,但我想问这个SO社区对此的看法。 ]
在此先感谢
是它的一个潜在的噩梦。调试问题也非常困难,因为触发是'隐藏'的,也是我最后看的地方。我不知道你可以在sql server上关闭它。尽管这个数据库是RDB。 – Matt 2009-12-11 12:02:50
这样做肯定有更好的方法我同意 - 我只是想知道它背后的技术性 – Matt 2009-12-11 12:04:39
对不起,我没有看到RDB标签 - 但看起来这种行为是有意设计的。 – Alex 2009-12-11 12:09:37