Platform:
OS:Windows Server 2012 R2 64bit
Oracle:11.2 64bit
引子:
被审医院有两个HIS系统在并行(可不可以说脏话--!),老HIS无法提供软件的Data Dictionary(可以可以骂人--!!)因此只有自行找表与表之间的关系(!@#¥%……)。
思路
Oracle的数据字典USER(ALL,DBA)_CONSTRAINTS中有几个表示数据表间主外键关系的重要字段:
|-OWNER:用户
|-TABLE_NAME:表名
|-CONSTRAINT_NAME:约束名
|-CONSTRAINT_TYPE:约束类别
|-R_OWNER:外键用户
|-R_CONSTRAINT_NAME:外键约束名
在这里可以将USER(ALL,DBA)_CONSTRAINTS自连接找到存在主外键关系的表,关联字段为CONSTRAINT_NAME与R_CONSTRAINT_NAME。下面实例是找表“TEMP_PERSONINFO”的关联表。
SELECT A.OWNER ,
A.TABLE_NAME ,
A.CONSTRAINT_NAME,
A.CONSTRAINT_TYPE,
A.R_OWNER,
A.R_CONSTRAINT_NAME ,
B.OWNER,
B.TABLE_NAME,
B.CONSTRAINT_NAME,
B.CONSTRAINT_TYPE,
B.R_OWNER,
B.R_CONSTRAINT_NAME
FROM USER_CONSTRAINTS A
JOIN USER_CONSTRAINTS B
ON A.CONSTRAINT_NAME = B.R_CONSTRAINT_NAME
WHERE UPPER (A.TABLE_NAME) = 'TEMP_PERSONINFO' ;
END