oracle - 如何在不删除级联的情况下删除表依赖项

时间:2014-06-10 19:15:02

标签: sql oracle stored-procedures oracle11g oracle10g

我有以下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,但是我想知道是否还有其他方法

触发器不是一个选项,因为我不想更改表的行为。该程序不会经常使用。 我不想使用触发器更改表格行为。

由于

2 个答案:

答案 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);

依旧......