【发布时间】:2011-02-10 05:58:41
【问题描述】:
是否可以通过脚本/工具使用 Oracle PL/SQL 根据表 fk 关系自动生成许多删除语句?
例如:我有一个表:CHICKEN (CHICKEN_CODE NUMBER) 并且有 30 个表,我需要删除对它的 CHICKEN_CODE 的 fk 引用;还有其他 150 个表外键链接到我需要首先删除的 30 个表。
我是否可以运行一些工具/脚本 PL/SQL,以便根据 FK 关系为我生成所有必要的删除语句?
(顺便说一句,我知道关系上的级联删除,但请注意:我不能在我的生产数据库中使用它,因为它很危险!)
我正在使用 Oracle 数据库 10G R2。
请注意:
Generate Delete Statement From Foreign Key Relationships in SQL 2008?
另一个用户刚刚在 SQL SERVER 2008 中编写了它,任何人都可以转换为 Oracle 10G PL/SQL 吗? 我无法... :-(
请假设 V_CHICKEN 和 V_NATION 是从根表中选择要删除的 CHICKEN 的条件:条件是:根表上的“where COD_CHICKEN = V_CHICKEN AND COD_NATION = V_NATION”。
【问题讨论】:
-
您提议的是手动实现 CASACDE DELETE。我看不出这怎么能不那么危险。无论如何,至关重要的问题是:您是要删除 CHICKEN 中的 所有 记录还是只删除一些(一个)?
-
我已经用脚本更新了我的答案,供您尝试。虽然没有保证......
-
你知道吗,我认为这并不像我想象的那么难。如果我今天有时间,我也许可以解决它。
-
我已经用一个新脚本更新了我的答案。它对我有用,但我怀疑如果你有复杂的关系可能会出现问题。试一试,让我知道它是怎么回事。 :)
-
为什么要在“发现模式”下编程?就像“我不知道这是什么类型的数据库,也不知道表的布局和连接方式,我只知道我需要删除其中的一行”。您没有为此数据库提供适当的数据访问层吗?
标签: oracle plsql code-generation