欢迎投稿

今日深度:

Oracle:查看当前用户的所有表及表的列 yellowcon

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类型是自己加的,主要是为了直接生成代码的时候,可以区分整数和小数。
这里写图片描述

www.htsjk.Com true http://www.htsjk.com/oracle/24161.html NewsArticle Oracle:查看当前用户的所有表及表的列 yellowcong,oracleyellowcong 我之前写过一个工具,动态生成oracle的实体类的功能,但是这个工具只能用来给Searsar这个项目用,所以呢,所以意义不是...
评论暂时关闭