Oracle:查看当前用户的所有表及表的列 yellowcong,oracleyellowcong
我之前写过一个工具,动态生成oracle的实体类的功能,但是这个工具只能用来给Searsar这个项目用,所以呢,所以意义不是特别的大,但是也可以扩展为别的实体类生成的。USER_COL_COMMENTS和USER_TAB_COLUMNS包含了表的字段和列信息。
查看当前用户的所有表
-- OWNER 当前用户名 -- table_name 表名称 SELECT * FROM DBA_TABLES WHERE OWNER='JHYG10_OLD' and table_name like '%USER%';
查询所有用户名为user的表

查看某张表的列
查看某张表里面的列信息,USER_COL_COMMENTS包含了用户的表的列信息。
select * FROM USER_COL_COMMENTS COL where COL.TABLE_NAME = 'CM_USER'

查看某帐表列的具体信息
搞定了每个表的没个字段信息后,需要获取具体信息,就需要结合表USER_TAB_COLUMNS 了,这张表里面包含了每个字段的信息
SELECT COL.COLUMN_NAME,
COL.COMMENTS,
TAB.DATA_TYPE,
TAB.DATA_LENGTH
FROM USER_COL_COMMENTS COL, USER_TAB_COLUMNS TAB
WHERE COL.TABLE_NAME = 'CM_USER' -- CM_USER的表
AND TAB.TABLE_NAME = COL.TABLE_NAME
AND TAB.COLUMN_NAME = COL.COLUMN_NAME

优化字段信息
由于在Oracle中,字段信息的大小,有可能和我们想要的不一样,比如如果是Number(1,2)类型的数据,就是一个小数类型的数据,但是我们直接看上去,就是一个int类型的数据,这一点是需要注意的,所以我又优化了查询的方法,对于不同了类型的进行了判断。
SELECT COL.COLUMN_NAME,
COL.COMMENTS,
case TAB.DATA_TYPE
when 'NUMBER' then
decode(sign(NVL(TAB.DATA_SCALE, 0)), 0, 'NUMBER', 'FLOAT')
else
TAB.DATA_TYPE
end as DATA_TYPE,
DECODE(TAB.DATA_TYPE,
'NUMBER',
TAB.DATA_PRECISION + TAB.DATA_SCALE,
TAB.DATA_LENGTH) AS DATA_LENGTH
FROM USER_COL_COMMENTS COL, USER_TAB_COLUMNS TAB
WHERE COL.TABLE_NAME = 'CMST_USER'
AND TAB.TABLE_NAME = COL.TABLE_NAME
AND TAB.COLUMN_NAME = COL.COLUMN_NAME
优化后的查询结果,和上面的没啥鸟样的变化,原因是没有Number类型的数据,有了,自然就会变了。

下面演示一个带有Number类型的数据,大家可以发现优化后的数据的大小和类型才能对得上,FLOAT类型是自己加的,主要是为了直接生成代码的时候,可以区分整数和小数。

本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。