2014-01-19 102 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模式上試過這個查詢,但它回答'沒有選擇行'。 –

相關問題