我的桌子:
TableA (id number,state number) TableB (id number,tableAId number,state number) TableC (id number,tableBId number,state number)
因此TableC中的项是TableB的子项,TableB中的项是TableA的子项.反之亦然 – TableA中的项是TableB的父项,TableB中的项是TableC的父项.
我想控制父项的状态……比方说,我们有这些数据:
TableA (id,state): 1,40 TableB (id,tableAId,1,40 2,60 TableC (id,tableBId,50 3,2,60 4,70
父母国家应该始终保持他孩子最小的状态.所以如果我们现在像这样更新TableC:
update TableC set state = 50 where Id = 1;
我的触发器应该自动更新TableB(设置状态= 50,其中id = 1),然后更新TableA(设置状态= 50,其中id = 1)
我想用触发器(在表A,表B,表C上进行更新,插入,删除之后)执行此操作,以便在执行每个操作后执行以下步骤:
>获取父ID
>从当前父母的所有孩子中找到最小的状态
>如果所有子项的最小状态大于父项的状态,则更新父项
如何避免“改变表错误”?在此示例中是否可以节省使用自治事务?我看到一些意见,变异表错误表明应用程序的逻辑存在缺陷 – 这是真的吗?如何更改我的逻辑以防止此错误?
谢谢
编辑:
感谢所有伟大的答案!
最后,我使用了触发器(感谢Vincent Malgrat,他指出了Tom Kyte的文章).
编辑:
在REAL END中,我使用了存储过程并删除了触发器:)