Oracle PL/SQL 级联触发器删除未按预期工作

Oracle PL/SQL cascading trigger delete not working as expected

我遇到了外键问题。我已经创建了一组触发器,如果​​ table 中的一行被删除,它们应该通过数据库级​​联删除,这样它的所有 children(以及那些 children 中的 children)将是删除。这是此类触发器的示例。

create or replace trigger trigg_delet_child before delete on PARENT for 
each row
begin
    delete from CHILD where foreign_key_parent_id = :old.id_parent;
end;

我在每个 table 上都有一组这样的触发器。我假设由于触发器应该在 before 执行删除语句,因此将手电筒传递到越来越低的 tables 直到我们最终击中没有 [=22] 的项目=] 并从那里开始删除并向上移动。

情况似乎并非如此,因为违反 foreign_key 约束是可以理解的,因为显然我误解了 BEFORE 的工作原理。有没有办法在不指定 foreign_key 约束应该级联删除的情况下回避这个问题?

我在下面的示例代码中试了一下,它可以工作。 桌子上还有其他触发器吗?或具有自引用 FK 的表格?

    Create table a (a_id number primary key, 
                a_text varchar2(10));

Create table b (b_id number primary key, 
                a_id number REFERENCES a (a_id),
                b_text varchar2(10));

Create table c (c_id number primary key, 
                b_id number REFERENCES b (b_id), 
                c_text varchar2(10));



Insert into a values(1 , 'A');
Insert into b values(11, 1, 'B');
Insert into c values(101, 11, 'C');
commit;

-- Generates an error
Delete from a;

create or replace trigger A_DEL before delete on a for 
each row
begin
    delete from B where A_id = :old.A_ID;
end;
/

create or replace trigger B_DEL before delete on B for 
each row
begin
    delete from C where B_id = :old.B_ID;
end;
/

-- Works
Delete from a;
COMMIT;