【问题标题】:procedure for delete records from tables Related to each other从表中删除记录的过程 相互关联
【发布时间】:2018-02-08 07:10:17
【问题描述】:

我的表有这些结构(在 oracle 中):

---table grandmother ---
  ID
  some other columns


---table mother---
  ID
  grandmother_ID
  some other columns

---table girl
  ID
  mother_ID
  some other columns

---table grandchild1
  ID
  girl_ID
  some other columns 

---table grandchild2
  ID
  girl_ID
  some other columns 

现在,我如何编写一个程序从祖母表中删除一条记录?很明显,我们应该删除mother表中的grandm_IDs和girl表中的mother_IDs和grandchild1和grandchild2中的girl_IDs的记录。

create or replace PROCEDURE GRAND_MOTHER_DELETE
( 
    IN_ID      IN      GRAND_MOTHER.ID%TYPE 
 )
 AS 
 BEGIN

  DELETE FROM GRAND_CHILD1 GC1 , GRAND_CHILD2 GC2 USING GC1 , GC2
  WHERE GC1.GIRL_ID = GC2.GIRL_ID
  AND GC2.GIRL_ID IN(   
  SELECT ID FROM GIRL WHERE MOTHER_ID IN (
  SELECT ID FROM MOTHER WHERE GRAND_MOTHER_ID=IN_ID));      

  DELETE
  FROM   GRAND_MOTHER
  WHERE  ID  = IN_ID; 

 END;

但它给出了语法错误。

【问题讨论】:

  • 从删除孙子开始向上移动。
  • @KaushikNayak 你能详细解释一下吗?
  • 首先从 GRANDCHILD2 中删除行。然后来自 GRANDCHILD1.然后来自 GIRL。等等。如果您将外键约束创建为ON DELETE CASCADE,您可能已经删除了父项,Oracle 将删除子项。
  • @Littlefoot ON DELETE CASCADE 解决了我的问题。
  • 不错;我很高兴你成功了!

标签: oracle stored-procedures cascading-deletes


【解决方案1】:

根据@Littlefoot 的回答,我在grandchild1、grandchild2、girl 和mother 表中添加ON DELETE CASCADE,我的问题就解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    相关资源
    最近更新 更多