首页 文章

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

提问于
浏览
0

我在表A中有一个外键到表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

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

相关问题