我尝试搜索一个查询,该查询给出了一个大型数据库的所有pk和fk。由于找不到任何好的查询,我想出了一个解决方案。
SELECT
cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
FROM
all_constraints cons, all_cons_columns cols
WHERE
cols.owner = 'DATABASE_NAME'
AND cons.constraint_type = 'P'
AND cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner
ORDER BY
cols.table_name, cols.position;
唯一需要更改的是将“ DATABASE_NAME”更改为特定的数据库名称!
我的问题是,是否有一种“简便”的方法可以从一个大型数据库中获取所有主键?
答案 0 :(得分:0)
查询的另一个版本可用于获取与表的外键关系,如下所示:
SELECT constr.table_name,
column_name,
position,
constr.constraint_name,
DECODE (constraint_type, 'P', 'Primary Key', 'Foreign Key') key_type,
(SELECT constr2.table_name
FROM all_constraints constr2
WHERE constr2.CONSTRAINT_NAME = constr.R_CONSTRAINT_NAME) fK_to_table
FROM all_cons_columns conscol, all_constraints constr
WHERE conscol.constraint_name = constr.constraint_name
AND conscol.table_name = constr.table_name
AND CONSTRAINT_TYPE IN ('P', 'R')
--AND constr.table_name = 'MYTEBLE' (your table here)
ORDER BY table_name, constraint_type, position;
输出将采用以下格式
TABLE_NAME COLUMN_NAME POSITION CONSTRAINT_NAME KEY_TYPE FK_TO_TABLE
ACCOUNT ACCOUNT_ID 1 ACCOUNT_PK Primary Key
ACCOUNT ACCOUNT_TYPE_ID 1 ACCOUNT_FK3 Foreign Key ACCOUNT_TYPE