2014-01-19 52 views
1

我需要得到有关表的关系信息,格式如下:如何获取有关oracle中表关系的信息?

source_table source_pk source_fk destination_table destination_pk 
............ ......... ......... ................. .............. 

employees  employee_id job_id   jobs    job_id 

它说表“员工”与“雇员标识”和“JOB_ID”外键的主键是指表“工作”原发性'job_id'的关键。 有任何查询给我这些信息吗? 更新: 我想要一个查询,填充此表与所有关系的特定架构像'小时'。

回答

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; 

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

+0

我想要关于特定模式中的所有关系的信息,而表员工仅仅是一个例子。 –

+0

在这种情况下,用模式名称 –

+0

替换WHERE table_name ='EMPLOYEE''我在hr模式上试过这个查询,但它回答'没有选择行'。 –