当前位置:   article > 正文

【oracle】oracle元数据获取用户下的表关键信息_oracle dataprecision

oracle dataprecision

了解一个业务系统的数据情况,所有要了解该业务系统的表结构信息及ER关系图。本文主要聊聊通过oracle元数据获取该用户下所有表的关键信息,比如:表名、表描述、字段名、字段描述、字段类型、字段长度、是否主键、是否非空、默认值等。

获取该用户下所有表名和表描述

user_tab_comments表(视图),该表存储的是该用户下所有表和描述

select table_name, comments from user_tab_comments where table_type = 'TABLE';
  • 1

总共三个字段:

字段名解释
table_name表名
table_type表类型(table、view)
comments表描述

user_tables表(视图),该表存储该用户下所有表相关信息,包括表的行数(num_rows)、块数(blocks)、字段平均大小(avg_row_len)等信息。

all_tables表(视图),该表存储所有用户下所有表相关信息,表结构和user_table表一样。

dba_tables表(视图),该表存储系统内所有表相关信息,包括系统表,结构和user_table表一样。

获取查看该用户下所以表字段信息(除字段描述)

user_tab_columns表(视图),在sys用户下的视图,来源于user_tab_cols表,存储该用户下所有表的字段信息,不包括字段描述和约束等。

select table_name  --表名
      ,column_name  --字段名
      ,data_type  --字段类型
      ,data_length  --字段长度
      ,data_precision  --字段精度(理解为整数位数)
      ,data_scale  --字段小数位位数
      ,nullable  --是否可为null
      ,data_default  --默认值
  from user_tab_columns
;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

该表主要关键字段有如下:

字段名解释
table_name表名
column_name字段名
data_type字段类型(number、varchar2等)
data_length字段长度
data_precision字段精度(比如number类型的整数位)
data_scale字段小数范围
nullable是否为空(N:不为空,Y:可为空)
column_id字段顺序序号
default_length默认长度
data_default默认值
num_distinct字段去重数(count(distinct col))
low_value字段最小值
high_value字段最大值
density密度
num_nulls空值数
num_buckets桶数
last_analyzed最后分析时间(未知具体含义,望大佬解释)
sample_size样品大小(未知具体含义)
character_set_nane未知具体含义
char_col_decl_length未知具体含义
global_stats整体状态(未知具体含义)
user_stats用户状态(未知具体含义)
avg_col_len字段平均长度(可以计算实际存储大小)
char_length字符长度
char_used字符单位(B)
v80_fmt_image未知具体含义
data_upgraded未知具体含义
histogram未知具体含义

获取字段描述

user_col_comments表(视图)获取该用户下所有表字段描述

select table_name, columns_nam, comments from user_col_comments;
  • 1

注: 其中有table_name类似于下图的,这些是被删除存在回收站的表
在这里插入图片描述
该表总共三个字段:

字段名描述
table_name表名
column_name字段名
comments字段描述

获取表的主键信息

获取主键字段信息

select ucc.table_name, ucc.column_name
  from user_cons_columns ucc, user_constraints uc
 where uc.constraint_name = ucc.constraint_name
   and uc.constraint_type = 'P'
;
  • 1
  • 2
  • 3
  • 4
  • 5

user_constraints视图,存储表约束相关信息。
关键字段:

字段名描述
owner所有者
constraint_name约束名称
constraint_type约束类型(P:主键,U:唯一,F:外键等)
table_name表名
r_owner上一个所有者
r_constraint_name上一个约束名称
index_owner索引所有者
index_name索引名称

user_cons_columns视图,存储约束的字段信息。
关键字段:

字段名描述
owner所有者
constraint_name约束名称
table_name表名
column_name字段名称
position位置

获取用户下表关键信息

通过以上表整合获取用户下关键信息

select t1.table_name --表名称
      ,t1.comments as table_comment  --表描述
      ,t2.column_name  --字段名称
      ,t3.comments as column_comment  --字段描述
      --,t2.data_type  --字段类型
      --,t2.data_length  --字段长度
      --,t2.data_precision  --字段精度
      --,t2.data_scale  --字段小数范围
      ,t2.data_type_new  --组合的字段类型
      ,case when t4.table_name is not null then 'Y'
       else null end is_pk  --是否为主键
      ,t2.is_not_null  --是否为空
      ,t2.data_default  --默认值
  from 
  ( --该用户下表名和表描述
  	select table_name, comments
  	  from user_tab_comments 
  	 where table_type = 'TABLE'
  ) t1
  left join
  ( --该用户下表名、字段信息
  	select table_name  --表名
          ,column_name  --字段名
          ,data_type  --字段类型
          ,data_length  --字段长度
          ,data_precision  --字段精度(理解为整数位数)
          ,data_scale  --字段小数位位数
          ,case when nullable = 'N' then 'Y'
           else null end as is_not_null  --是否非空
          ,data_default  --默认值
          ,case when data_precision is not null and data_scale is not null then data_type||'('||data_precision||','||data_scale||')'
                when data_precision is not null and data_scale is null then data_type||'('||data_precision||')'
                when data_precision is null and data_scale is null and data_length is not null then data_type||'('||data_length||')'
           else data_type end as data_type_new
				,column_id	 
      from user_tab_columns
  ) t2 on t1.table_name = t2.table_name
  left join
  (
	--该用户下表名和字段描述
	select table_name
	      ,column_name
	      ,comments
	  from user_col_comments
  ) t3 on t2.table_name = t3.table_name and t2.column_name = t3.column_name
  left join
  ( --该用户下的主键信息
  	select ucc.table_name, ucc.column_name
  	  from user_cons_columns ucc, user_constraints uc
  	 where uc.constraint_name = ucc.constraint_name
       and uc.constraint_type = 'P'
  ) t4 on t2.table_name = t4.table_name and t2.column_name = t4.column_name
 order by t1.table_name, t2.column_id --保证字段顺序和原表字段顺序一致
;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/559805
推荐阅读
相关标签
  

闽ICP备14008679号