可以查詢根據您的訪問級別的任何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;
注意:如果表上沒有主鍵,則不會返回任何行。
來源
2014-01-19 17:18:39
San
我想要關於特定模式中的所有關係的信息,而表員工僅僅是一個例子。 –
在這種情況下,用模式名稱 –
替換WHERE table_name ='EMPLOYEE''我在hr模式上試過這個查詢,但它回答'沒有選擇行'。 –