首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oracle on delete cascade with condition

oracle on delete cascade with condition
EN

Stack Overflow用户
提问于 2016-11-22 14:36:37
回答 1查看 343关注 0票数 0

我在表B中有一个指向表A的外键。我想要的是删除A中的记录,在B中的FK字段中使用cascade delete或cascade set NULL取决于应该删除的记录的某些列中的值。

就我不能在delete cascade中使用条件而言,我的想法是始终使用cascade SET NULL并向表B添加触发器

代码语言:javascript
复制
AFTER UPDATE..
FOR EACH ROW
BEGIN
   IF :new.a = 1 THEN
       DELETE FROM B WHERE ID = :new.id
   ENDIF;
END; 

但我得到了一个错误,类似于“表正在发生变化,触发器/函数可能看不到它”。

因此,我已经将if-else更改为过程调用

代码语言:javascript
复制
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中的记录仍然可以是空的(不是通过外键),也可以不是,所以我想要执行清理并删除使用记录。

EN

回答 1

Stack Overflow用户

发布于 2016-11-27 21:42:53

实现了以下决策。我在表A上使用了"on delete“触发器来删除表B中的引用记录或将其设置为null。因此,delete触发器对B运行清除操作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40735297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档