【问题标题】:Select all tables in schema based on their parent-child hierarchy根据父子层次结构选择架构中的所有表
【发布时间】:2013-10-07 22:00:01
【问题描述】:

我的要求是从根据搜索条件动态选择的几个表中删除数据。

所以我的游标应该在它们的父子层次结构中获取表,以便在删除记录时它不会给出异常'CHILD RECORD FOUND'。

让我们尽情发挥

表 A 是表 B 的子表

表 B 是表 C 的子表

表 D 是表 G 的子表

所以应该按这个顺序删除。

然后
B 或 D 然后
D 或 G

【问题讨论】:

  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 您是在使用您知道其依赖关系的特定表组,还是在尝试编写可以处理任何表的更通用的实用程序?
  • 它是通用脚本,应该处理架构中的所有表

标签: sql oracle


【解决方案1】:

如果您使用级联外键,则不必担心表顺序。只需从层次结构的顶部(在您的示例中为表 G)删除,然后将自动删除后代表中的所有相关行。

阅读更多关于Cascading Referential Integrity Constraints的信息。


你的评论:

即使删除级联不存在并且我们不了解依赖关系,它也应该足够通用以处理删除。

有关在 Oracle 中发现约束的提示,请参阅这些问题:

【讨论】:

  • 标签sql仅指查询语言,不指DBMS产品“SQL Server”。为此,标签sql-server 是有意的。
  • @a_horse_with_no_name,我知道,但许多 Microsoft SQL Server 用户习惯于简单地标记他们的问题 sql,因为他们认为这是他们使用的产品的名称。他们还认为“单词”指的是他们的文本编辑器。
  • 对于 DBMS 的困惑,我深表歉意。它是甲骨文数据库管理系统。即使删除级联不存在并且我们不了解依赖关系,它也应该足够通用以处理删除。
  • 我浏览了建议的链接,但如果表具有循环依赖关系,则此解决方案不起作用。任何可以避免循环依赖的解决方案(如果有的话)..
  • 与通过循环数据结构进行的任何其他递归搜索一样,您只需跟踪您之前看到的项目并将其排除在搜索之外。抱歉,我没有关于那个的参考资料。
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多