【发布时间】: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