带有条件的删除级联上的oracle

时间:2016-11-22 06:36:37

标签: oracle triggers foreign-keys

我在表B中有一个外键到表A.我想要的是,在删除A中的记录,使用级联删除或级联设置B中的FK字段中的NULL取决于某些列中的值记录,应删除。

至于我无法在删除级联中使用条件,我的想法是始终使用级联SET NULL并向表B添加触发器

AFTER UPDATE..
FOR EACH ROW
BEGIN
   IF :new.a = 1 THEN
       DELETE FROM B WHERE ID = :new.id
   ENDIF;
END; 

但我得到一个错误,就像"表正在变异,触发/功能可能看不到它"。

所以,我已经将if-else更改为过程调用

AFTER UPDATE
BEGIN
    cleanup_table_b();
END;

create or replace procedure cleanup_table_b
IS begin    
    DELETE FROM B WHERE a = 1;    
end;

但仍然收到错误ORA-04091,ORA-06512,ORA-04088

商业理念是,B中的记录仍然可以是有用的(不是外键),所以我想执行清理并删除使用记录。

1 个答案:

答案 0 :(得分:0)

实施了以下决定。在表A上使用了“on delete”触发器来删除或设置表B中的引用记录。所以删除触发器运行了B的清理

相关问题