如何在oracle中获取有关表关系的信息?

时间:2014-01-19 16:31:17

标签: oracle foreign-key-relationship

我需要以下列格式获取有关表关系的信息:

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'。

1 个答案:

答案 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;

注意:如果表上没有主键,则不会返回任何行。