我有以下表格:
表1 (Field_A)
Table2 (Field_B和Table1中的Field_A作为具有Cascade属性的ForeignKey约束)
Table2 有一个触发器,可在删除行时执行某些操作。
当删除操作的原点是Table1级联时,有没有避免执行Table2中的触发器?
谢谢。
答案 0 :(得分:1)
我不认为有一种开箱即用的方法可以做到这一点,但你可以创建一个包含变量的包,它在一个触发器中设置并在下一个中检查。
这些包变量是特定于会话的,因此您不会打扰其他会话,但您应确保重置该变量,否则独立删除可能会被识别为同一会话中的级联删除。 / p>
粗略地说,它应该是这样的:
create package PKG_CASCADE as
V_YOURFLAG char(1);
end package;
/
create package body PKG_CASCADE as
begin
V_YOURFLAG := 'N';
end;
/
create trigger TDB_Table1 before delete on Table1
begin
begin
PKG_CASCADE.V_YOURFLAG := 'Y';
delete from Table2 .....;
PKG_CASCADE.V_YOURFLAG := 'N';
exception when others do
PKG_CASCADE.V_YOURFLAG := 'N';
end;
end;
/
create trigger TDB_Table2 before delete on Table2
begin
if PKG_CASCASE.V_YOURFLAG <> 'Y' then
-- Do you stuff.
end if;
end;
/
我在没有Oracle的情况下输入了这个,所以请原谅我的语法错误。
有关更详细的教程,请参阅: