可以查询根据您的访问级别的任何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模式上试过这个查询,但它回答'没有选择行'。 –