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