如何检索所有表列、数据类型、数据长度、约束类型以及引用的列和表
Posted
技术标签:
【中文标题】如何检索所有表列、数据类型、数据长度、约束类型以及引用的列和表【英文标题】:How to retrieve all table columns, data type, data length, constraint type and referenced column and table 【发布时间】:2021-08-07 14:22:29 【问题描述】:我能够列出所需的大部分信息,但不知道如何列出引用的表和列
需要的信息是:
-
表名
列名
数据类型
约束类型
参考表
参考栏目
SELECT at.owner, at.table_name, atc.column_name AS column_names, atc.data_type AS data_type, ac.constraint_type FROM all_tables at JOIN all_tab_columns atc ON at.table_name = atc.table_name LEFT JOIN all_cons_columns acc ON atc.column_name = acc.column_name AND acc.table_name = at.table_name LEFT JOIN all_constraints ac ON ac.constraint_name = acc.constraint_name WHERE at.owner NOT IN ( 'SYS', 'SYSTEM', 'DBSNMP', 'DVSYS', 'GSMADMIN_INTERNAL', 'LBACSYS', 'MDSYS', 'OJVMSYS', 'ORDDATA', 'WMSYS', 'XDB', 'CTXSYS', 'APPQOSSYS', 'AUDSYS', 'OUTLN', 'DBSFWUSER', 'ORDSYS', 'OLAPSYS' ) GROUP BY at.owner, at.table_name, ac.constraint_type, atc.column_name, atc.data_type, ac.r_owner ORDER BY at.owner;
有没有一种方法可以获取所有约束以及引用的键和表名?我已经尝试了很多,但无法弄清楚。
【问题讨论】:
【参考方案1】:您需要外部自联接。看下面的例子:
主表:
SQL> create table master (id_mas number constraint pk_mas primary key);
Table created.
明细表,其ID_MAS
列引用主表:
SQL> create table detail (id_det number constraint pk_det primary key,
2 id_mas number constraint fk_det_mas references master (id_mas));
Table created.
返回您正在寻找的信息的查询。注意 USER_CONSTRAINTS
和 USER_CONS_COLUMNS
的外部自连接(第 8 行和第 9 行):
SQL> select mt.table_name,
2 mtc.column_name,
3 mt.constraint_type,
4 --
5 mtr.table_name ref_table_name,
6 mtrc.column_name ref_column_name
7 from user_constraints mt join user_cons_columns mtc on mtc.constraint_name = mt.constraint_name
8 left join user_constraints mtr on mtr.constraint_name = mt.r_constraint_name
9 left join user_cons_columns mtrc on mtrc.constraint_name = mtr.constraint_name
10 where mt.table_name in ('MASTER', 'DETAIL')
11 order by mt.table_name desc, mt.constraint_type;
TABLE_NAME COLUMN_NAME CONSTRAINT_TYPE REF_TABLE_NAME REF_COLUMN_NAME
--------------- --------------- --------------- --------------- ---------------
MASTER ID_MAS P
DETAIL ID_DET P
DETAIL ID_MAS R MASTER ID_MAS
SQL>
第三行读作:在detail
表中,有id_mas
列引用master
表的id_mas
列。
【讨论】:
以上是关于如何检索所有表列、数据类型、数据长度、约束类型以及引用的列和表的主要内容,如果未能解决你的问题,请参考以下文章