【原创】如何获取表的某个字段及其…

一、概述

    如何查看表字段的类型呢?我们可以通过user_tab_columns(或者user_tab_cols)视图进行查看。此外还有dba_tab_columns/dba_tab_cols和all_tab_columns/all_tab_cols视图也可以进行查看,只是查看的对象范围不一样而已。先来看看user_tab_columns的结构。

 主要的列属性有:
   TABLE_NAME          表、视图或Clusters名称
   COLUMN_NAME         列名

   COLUMN_ID           列ID
   DATA_TYPE           数据类型
   DATA_TYPE_MOD       Datatype modifier of the column
   DATA_TYPE_OWNER     Owner of the datatype of the column
   DATA_LENGTH         长度
   DATA_PRECISION      精度
   DATA_SCALE         小数点后位数
   NULLABLE           是否允许为空
   DEFAULT_LENGTH     默认值长度
   DATA_DEFAULT       默认值
   CHAR_LENGTH        列最大程度,用字符串表示

而USER_TAB_COLS比USER_TAB_COLUMNS多几列:

   HIDDEN_COLUMN         VARCHAR2(3)
   VIRTUAL_COLUMN        VARCHAR2(3)
   SEGMENT_COLUMN_ID     NUMBER
   INTERNAL_COLUMN_ID    NOT NULL NUMBER
   QUALIFIED_COL_NAME    VARCHAR2(4000)

而且存储内容多了隐藏字段。这些隐藏字段是Oracle自动添加的,并且设置HIDDEN_COLUMN和VIRTUAL_COLUMN都是YES。看oracle的脚本可以发现视图USER_TAB_COLUMNS就是根据视图USER_TAB_COLS创建的。所以使用时一般使用uer_tab_columns以避免取到隐藏字段。

二、例子

1.查看emp表的列ID,列名和数据类型。

select column_id,column_name,data_type from user_tab_columns where table_name = 'EMP';

结果如下:

COLUMN_ID  COLUMN_NAME   DATA_TYPE
---------- ----------    ----------
        EMPNO         NUMBER
        ENAME         VARCHAR2
        JOB           VARCHAR2
        MGR           NUMBER
        HIREDATE      DATE
        SAL           NUMBER
        COMM          NUMBER
        DEPTNO        NUMBER

2.这里得到的字段类型是粗糙的,如果要得到varchar2(100)这样完整的字段怎么办呢?别急,user_tab_columns还有其他字段保存了我们需要的信息,我们可以通过拼接得到完整的字段类型信息。
select TABLE_NAME ,column_id ,COLUMN_NAME, 
       DATA_TYPE ||
       decode(DATA_TYPE, 'DATE', '', '(' ||
              nvl(DATA_PRECISION, data_length) ||
              nvl2(nullif(DATA_SCALE, 0), ',' || data_scale, '') || ')') data_type
  from user_tab_columns  where table_name = 'EMP';

结果如下:

TABLE_NAME  COLUMN_ID COLUMN_NAME   DATA_TYPE
---------- ---------- ------------- -------------
EMP                 EMPNO         NUMBER(4)  
EMP                 ENAME         VARCHAR2(10)
EMP                 JOB           VARCHAR2(9)
EMP                 MGR           NUMBER(4)  
EMP                 HIREDATE      DATE       
EMP                 SAL           NUMBER(7,2)
EMP                 COMM          NUMBER(7,2)
EMP                 DEPTNO        NUMBER(2)
  

再来看看desc emp的结果:

Name     Type        
-------- ------------
EMPNO    NUMBER(4)           
ENAME    VARCHAR2(10)     
JOB      VARCHAR2(9)      
MGR      NUMBER(4)         
HIREDATE DATE              
SAL      NUMBER(7,2)       
COMM     NUMBER(7,2)       
DEPTNO   NUMBER(2)

通过比较发现,数据类型完全一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值