2002年世界杯决赛_2018俄罗斯世界杯 - dzlpgs.com

oracle查看表结构/视图结构、所有表、DBMS、字段等

文章目录

查看表结构(字段)查看表结构(字段) GET_DDL()方式查看视图结构 GET_DDL()方式

查看表结构(字段) 基于user_col_comments查看表结构(字段) 基于user_tab_columnsuser_tab_columns查看字段长度

查看所有表(有多少表)查看所有表(有多少表) all_tables查看所有表(有多少表) user_tables查看所有视图(有多少视图)

DBMS字段基本的字段常见的类型date、timestamp、timestamp(6)的区别timestamp的字段查看字段的sql-基础sql(主要用来拿元数据)查看字段的sql(实际用这个)

其他number类型的default为什么不能通过字符串拼接 报错 ORA-00932: 数据类型不一致: 应为 CHAR, 但却获得 LONG todo

查看表结构(字段)

这属于常规需求了,不止一种方法。

查看表结构(字段) GET_DDL()方式

SELECT DBMS_METADATA.GET_DDL('TABLE','T_USER') FROM DUAL;

需要注意的是,这几个都是大写: DBMS_METADATA.GET_DDL TABLE T_USER

返回结果是建表语句,类似于mysql的show create table。

查看视图结构 GET_DDL()方式

同上,把TABLE换成VIEW即可:

SELECT DBMS_METADATA.GET_DDL('VIEW','T_USER_VIEW') FROM DUAL;

查看表结构(字段) 基于user_col_comments

语句:

select * from user_col_comments where table_name like '%表名%';

这是一种简便的方式,输出只有3列(TABLE_NAME、COLUMN_NAME、COMMENTS), 适用于快速查看表字段,对表有个了解。输入结果示例:

TABLE_NAMECOLUMN_NAMECOMMENTST_USERIDIDT_USERUSER_ACCOUNT账号

查看表结构(字段) 基于user_tab_columns

user_tab_columns的信息比较全,列也很多,这里只列几个常用的列。

user_tab_columns查看字段长度

注:需要有对应权限才可以。

SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH

FROM USER_TAB_COLUMNS 子

WHERE TABLE_NAME = 'MESSAGE_TEMPLATE_RESUME';

查看所有表(有多少表)

查看所有表(有多少表) all_tables

注意记得加owner即可。

这条sql有问题,数量多很多:

SELECT TABLE_NAME FROM all_tables 子;

先分组看下有哪些owner,肯定包含要找的用户及sys用户等:

SELECT owner FROM all_tables 子 group by owner;

带上具体的用户名就是对的了(用这条sql即可):

SELECT TABLE_NAME FROM all_tables 子 where owner='用户名';

查看所有表(有多少表) user_tables

简单点就user_tables,直接就是当前用户的所有表。

select * from user_tables;

查看所有视图(有多少视图)

也是可以查看全部和当前用户的。

select * from all_views where owner='用户';

select * from user_views; # 查出来的就是当前用户的

DBMS

DBMS是database manage system(数据库管理系统)的简称。 以DBMS_开头的是一套基础方法,例如: DBMS_METADATA.GET_DDL() # 获取表结构 DBMS_RANDOM.STRING() # 生成随机值

字段

基本的字段

最起码得有这几个字段。

列名 AMOUNT 类型 DECIMAL 长度 22 标度 127 是否允许为空 Y/N # 这个字段和user_col_columns一致 注释 金额(字段名一般在注释里) 顺序 2

常见的类型

CHAR # VARCHAR2 # NUMBER # DATE # 这个需要特别注意下,date在数据库长度是7位(世纪年月日时分秒分别占一个字节) TIMESTAMP(6) # 这个就是timestamp

date、timestamp、timestamp(6)的区别

字段描述date精度小数点后3位timestamptimestamp类型默认就是6位timestamp(6)timestamp类型默认就是6位

有timestamp(6),不由得的想,是否还有timestamp(n)? 确实如此,最多到timestamp(9)。

timestamp的字段

查看字段的sql-基础sql(主要用来拿元数据)

语句:

SELECT

t.column_name AS 列名,

t.data_type AS 类型,

t.data_length AS 长度,

t.char_length AS 字符长度, -- 只有varchar2、char等字符类型有

t.data_precision AS 标度,

t.data_scale AS data_scale,

t.nullable AS 是否允许为空,

t2.comments AS 注释,

t.column_id AS 顺序 -- 并不重要

from user_tab_columns t

inner JOIN

USER_COL_COMMENTS t2

ON t.column_name=t2.column_name

where t.table_name = '表名'

AND t2.table_name='表名';

注:where条件后为什么要写两个table_name呢,是因为不同表,id等字段都可能重复,如果不都加表名,id会大量重复(不同表间的id)。

还有一点,nullable(是否允许为空)是数据库直接查出来的,这个和我们常规的逻辑是有点逆着的,常规的逻辑是是否必填。这里还是推荐按字段的来,否则sql需要反向写。 是否必填 # 人类的思维 是否允许为空 # 数据库里的字段

查看字段的sql(实际用这个)

语句:

SELECT

t.TABLE_name AS 表名,

t.column_name AS 列名,

t.data_type

|| CASE

WHEN t.data_type ='VARCHAR2' THEN '('|| t.data_length ||')'

WHEN t.data_type ='CHAR' THEN '('|| t.data_length ||')'

WHEN t.data_type ='NUMBER'

and t.data_precision IS NOT NULL AND t.data_scale is NOT null

THEN '('|| t.data_precision || ',' || t.data_scale ||')'

--WHEN 'NUMBER' THEN

END

AS 类型及长度精度,

t.nullable AS 是否允许为空,

t2.comments AS 注释

from user_tab_columns t

inner JOIN

USER_COL_COMMENTS t2

ON t.column_name=t2.column_name

where t.table_name = '表名'

AND t2.table_name='表名'

这里加上table_name是因为迁库时往往是多张表,需要带上表名区分下。

其他

number类型的default为什么不能通过字符串拼接 报错 ORA-00932: 数据类型不一致: 应为 CHAR, 但却获得 LONG todo

错误信息: ORA-00932: 数据类型不一致: 应为 CHAR, 但却获得 LONG

好奇怪啊,直接查可以查出来,但是拼接就报错。 本来是计划,default信息也拼接到字段里呢,结果卡住了。