我有以下oracle表:
Family= { pk_id_family, nm_family }
Generation_1 = { pk_id_gen_1, nm_gen_1, fk_id_family}
Dependent_gen_1 = { pk_id_dep_gen_1, nm_dep_gen_1, fk_id_gen_1 }
Dependent_gen_2 = { pk_id_dep_gen_2, nm_dep_gen_2, fk_id_dep_gen_1 }
Acquainted = {pk_id_acquainted, nm_acquainted, fk_id_gen_1 }
我想创建一个程序,接收 pk_id_family 参数并在 Generation_1 中递归删除,然后从 Generation_1删除(使用 fk_id_family )继续从 Dependent_gen_2 (使用 fk_id_dep_gen_1 )删除,依此类推,直至熟悉。
注意:我可以在约束上激活DELETE CASCADE,但是我想知道是否还有其他方法。
触发器不是一个选项,因为我不想更改表的行为。该程序不会经常使用。 我不想使用触发器更改表格行为。
由于
答案 0 :(得分:1)
我对甲骨文并非100%肯定,但您可以通过删除触发器执行此操作。 您可以在此链接中找到有关触发器的更多信息。
http://docs.oracle.com/cd/A57673_01/DOC/server/doc/SCN73/ch15.htm
答案 1 :(得分:0)
理论上,您可以使用连接族家族树来删除数据,但这将是可怕的代码,例如
DELETE FROM Acquainted
WHERE fk_id_gen_1 IN
(SELECT fk_id_gen_1
FROM Dependent_gen_1
JOIN Generation_1 ON fk_id_gen_1=pk_id_gen1
WHERE fk_id_family= my_parameter);
DELETE FROM Dependent_gen_2
WHERE fk_id_dep_gen_1 IN
(SELECT pk_id_dep_gen_1
FROM Dependent_gen_1
JOIN Generation_1 ON fk_id_gen_1=pk_id_gen1
WHERE fk_id_family= my_parameter);
依旧......