我有一个oracle数据库模式与更复杂的外键关系..我需要将测试数据填充到所有表..由于外键约束我发现很难找到表的层次结构..任何人都可以建议任何包或方法完成这个..
提前致谢
如果您能让我们知道您希望输出采用何种形式,将会很有帮助.您可能希望从Frank Kulash的针对DBA_CONSTRAINTS表的层次结构查询的示例开始,以显示路径.
如果您正在寻找一种方法来确定加载表的顺序,那就与dba.stackexchange上提出的问题相同(不能将此问题标记为重复,因为DBA仍处于测试阶段).就像是
WITH constraint_tree AS
(
SELECT DISTINCT
a.table_name AS table_name
, b.table_name AS parent_table_name
FROM dba_constraints a
LEFT OUTER JOIN dba_constraints b
ON a.r_constraint_name = b.constraint_name
AND a.owner = b.owner
WHERE a.owner = 'SCOTT'
)
SELECT table_name, lvl
FROM (
SELECT a.*,
rank() over (partition by table_name order by lvl desc) rnk
FROM (
SELECT table_name, level lvl
FROM constraint_tree
START WITH parent_table_name IS NULL
CONNECT BY NOCYCLE parent_table_name = PRIOR table_name
) a
) b
WHERE rnk = 1
ORDER BY lvl, table_name
/
Run Code Online (Sandbox Code Playgroud)
将按照它们应该加载的顺序给你表(假设数据中没有循环).如果要并行加载,LVL则可以同时加载所有具有相同表的表.