我在表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 回答
以下的决定已经实施 . 在表A上使用了“on delete”触发器来删除或设置表B中的引用记录 . 所以删除触发器运行了B的清理