我需要以下列格式获取有关表关系的信息:
source_table source_pk source_fk destination_table destination_pk
............ ......... ......... ................. ..............
employees employee_id job_id jobs job_id
它表示'employee_id'主键和'job_id'外键的表'employees'指的是主键为'job_id'的表'jobs'。 有任何查询给我这个信息吗? 更新: 我想要一个查询,用这个表填充特定模式的所有关系,如'hr'。
答案 0 :(得分:2)
您可以根据您的访问级别查询任何dba_constraints,all_constraints或user_constraints视图,如下所示
WITH tab AS (SELECT table_name,
MIN(decode(constraint_type, 'P', constraint_name, NULL)) PRIMARY_KEY,
MIN(decode(constraint_type, 'R', constraint_name, NULL)) FOREIGN_KEY,
MIN(decode(constraint_type, 'R', r_constraint_name, NULL)) DESTINATION_PK
FROM dba_Constraints
WHERE table_name = 'EMPLOYEE'
GROUP BY table_name)
SELECT t.table_name, t.PRIMARY_KEY, t.FOREIGN_KEY, uc.table_name, t.DESTINATION_PK
FROM tab t
LEFT OUTER JOIN dba_Constraints uc
ON (uc.constraint_name = t.destination_pk);
获取有关特定模式中所有表的信息(示例HR):
WITH tab AS (SELECT table_name,
MIN(decode(constraint_type, 'P', constraint_name, NULL)) PRIMARY_KEY,
MIN(decode(constraint_type, 'R', constraint_name, NULL)) FOREIGN_KEY,
MIN(decode(constraint_type, 'R', r_constraint_name, NULL)) DESTINATION_PK
FROM all_constraints
WHERE owner = 'HR'
GROUP BY table_name)
SELECT t.table_name, t.PRIMARY_KEY, t.FOREIGN_KEY, uc.table_name, t.DESTINATION_PK
FROM tab t
LEFT OUTER JOIN all_constraints uc
ON (uc.constraint_name = t.destination_pk)
ORDER BY 1;
注意:如果表上没有主键,则不会返回任何行。