我在表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中的记录仍然可以是有用的(不是外键),所以我想执行清理并删除使用记录。
答案 0 :(得分:0)
实施了以下决定。在表A上使用了“on delete”触发器来删除或设置表B中的引用记录。所以删除触发器运行了B的清理