如何检索所有 table 列、数据类型、数据长度、约束类型和引用列以及 table
How to retrieve all table columns, data type, data length, constraint type and referenced column and table
我能够列出大部分需要的信息,但不知道如何列出引用的 table 和列
需要的信息是:
- Table 名字
- 栏目名称
- 数据类型
- 约束类型
- 引用table
- 参考专栏
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;
有没有一种方法可以获得所有约束以及引用的键和 table 名称?我已经尝试了很多,但无法弄清楚。
您需要外部自连接。看下面的例子:
硕士table:
SQL> create table master (id_mas number constraint pk_mas primary key);
Table created.
详细信息 table,其 ID_MAS
列引用了主 table:
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.
查询您正在寻找的 returns 信息。注意 outer self join with both USER_CONSTRAINTS
and USER_CONS_COLUMNS
(lines #8 and 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>
第 3 行内容如下:在 detail
table 中,id_mas
列引用了 master
table 的 id_mas
列。
我能够列出大部分需要的信息,但不知道如何列出引用的 table 和列
需要的信息是:
- Table 名字
- 栏目名称
- 数据类型
- 约束类型
- 引用table
- 参考专栏
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;
有没有一种方法可以获得所有约束以及引用的键和 table 名称?我已经尝试了很多,但无法弄清楚。
您需要外部自连接。看下面的例子:
硕士table:
SQL> create table master (id_mas number constraint pk_mas primary key);
Table created.
详细信息 table,其 ID_MAS
列引用了主 table:
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.
查询您正在寻找的 returns 信息。注意 outer self join with both USER_CONSTRAINTS
and USER_CONS_COLUMNS
(lines #8 and 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>
第 3 行内容如下:在 detail
table 中,id_mas
列引用了 master
table 的 id_mas
列。