Database 查询以获取数据库架构中的父表和子表

Database 查询以获取数据库架构中的父表和子表,database,oracle,Database,Oracle,我正在使用JDBC连接编写一个dbExporter,它将数据从一个数据库导出到另一个数据库。为此,我需要导出哪些表,我使用查询获取所有表名 SELECT DISTINCT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE' 但问题是取回它们的顺序 场景:(订单详细信息包含来自订单的外键)。 假设上述查询的结果将产生订单详情、订单。我会先尝试导出订单详细信息的数据,然后再导出订单。此步骤引发异常,因为订单详细信息与订单具有外

我正在使用JDBC连接编写一个dbExporter,它将数据从一个数据库导出到另一个数据库。为此,我需要导出哪些表,我使用查询获取所有表名

SELECT DISTINCT OBJECT_NAME 
  FROM USER_OBJECTS
 WHERE OBJECT_TYPE = 'TABLE'
但问题是取回它们的顺序

场景:(订单详细信息包含来自订单的外键)。 假设上述查询的结果将产生订单详情、订单。我会先尝试导出订单详细信息的数据,然后再导出订单。此步骤引发异常,因为订单详细信息与订单具有外键关系。因此,我需要先导出订单表


如何确保上述查询的结果首先得到父表,然后得到其子表。是否有直接从查询返回表的方法。

您可以在此处使用系统视图
user\u constraints
user\u cons\u columns
, 下一步构建分层查询,显示表之间的依赖关系,并将其连接到
用户\u表

with hierarchy as (
  select child_table, max(level) lvl 
    from (
      select uc.table_name child_table, ucc.table_name parent_table
        from user_constraints uc
        left join user_cons_columns ucc on ucc.constraint_name = uc.r_constraint_name
        where constraint_type = 'R')
    connect by parent_table = prior child_table
    group by child_table)
select u.table_name, h.lvl 
  from user_tables u left join hierarchy h on h.child_table = u.table_name
  order by lvl nulls first, u.table_name
输出和输出:

首先,您必须导出具有可空LVL的表,rest按此列的顺序进行。
我不确定这是否解决了所有可能的依赖或更复杂的场景,但在给定的示例中有效。

谢谢您仔细思考。在我的情况下,我的用户拥有所有访问权限。应该为执行此角色的用户提供什么类型的访问权限?
TABLE_NAME                            LVL
------------------------------ ----------
ORDERS                         
TEST_TABLE                     
ORDER_DETAILS                           1
ORDER_SUB_DETAILS                       2