您可以根据您的访问级别查询任何 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;
注意:如果表上没有主键,则不会返回任何行。