我在表B中有一个指向表A的外键。我想要的是删除A中的记录,在B中的FK字段中使用cascade delete或cascade set NULL取决于应该删除的记录的某些列中的值。
就我不能在delete cascade中使用条件而言,我的想法是始终使用cascade 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中的记录仍然可以是空的(不是通过外键),也可以不是,所以我想要执行清理并删除使用记录。
发布于 2016-11-27 21:42:53
实现了以下决策。我在表A上使用了"on delete“触发器来删除表B中的引用记录或将其设置为null。因此,delete触发器对B运行清除操作
https://stackoverflow.com/questions/40735297
复制相似问题