读取Oracle列信息如何判断类型?
1.
 select user_col_comments.comments,
        user_tab_columns.column_name,
        user_tab_columns.data_type,
        user_tab_columns.data_scale
   from user_tab_columns, user_col_comments
  where user_tab_columns.table_name = user_col_comments.table_name
    and user_tab_columns.column_name = user_col_comments.column_name
    and lower(user_tab_columns.table_name) = lower('mkt_guider_calender')
  order by user_tab_columns.column_id
如果列的类型为整形和浮点形那么data_type都是NUMBER,请问这种类型是如何区分的?2.column_name定义的时候是(CYear),但是查询出来的都是大写(CYEAR)

解决方案 »

  1.   

    整形和浮点形 都是number 
    oracle没有单独的区分他们的  number(m,n) m表示总的位数 n表示小数点后的位数oracle存的都是大写的
    除非你用双引号 "CYear" 这样oracle就会严格的区分大小写
      

  2.   

    1. 查查oracle的精度,利用data_length和data_scale列信息来判断,比如:
       case data_length when 38 then 'int' end, case data_scale when 129 then real end2. 利用lower和upper处理一下
      

  3.   


    numeric(p,s):完全映射至number(p,s),p默认为38
    decimal(p,s)或dec(p,s):完全映射至number(p,s)
    integer或int:完全映射至number(38)
    smallint:完全映射至number(38)
    float(b):映射至number类型
    double precision:映射至number类型
    real:映射至number类型
    create table tb(
           col_1 number(5,5),
           col_2 numeric(5,5),
           col_3 decimal(5,5),
           col_4 int,
           col_5 smallint,
           col_6 double precision,
           col_7 real,
           col_8 float);
    --
    select column_name,data_type,data_length,data_precision,data_scale
    from user_tab_columns
    where table_name='TB'; COLUMN_NAME                    DATA_TYPE                                                                        DATA_LENGTH DATA_PRECISION DATA_SCALE
    ------------------------------ -------------------------------------------------------------------------------- ----------- -------------- ----------
    COL_1                          NUMBER                                                                                    22              5          5
    COL_2                          NUMBER                                                                                    22              5          5
    COL_3                          NUMBER                                                                                    22              5          5
    COL_4                          NUMBER                                                                                    22                         0
    COL_5                          NUMBER                                                                                    22                         0
    COL_6                          FLOAT                                                                                     22            126 
    COL_7                          FLOAT                                                                                     22             63 
    COL_8                          FLOAT                                                                                     22            126
    --
    从data_length这列看,上面所有的数值类型长度都是22,说明所有的类型都映射至了number类型。
      

  4.   

    也许版本有差异,不过我只是给个建议,那个case when写法不一定完全正确,得试试看,不过系统表中应该有data_length和data_scale列信息,我在11g中用过,是用程序get后处理的,没有直接在sql中处理