在oracle中我从USER_TAB_COLUMNS 要取出字段,字段数据类型,字段长度,问题出来了,如果是number类型的字段,取出来的字段长度始终是22,咋整啊?各位大虾帮忙啊,在线等待...

解决方案 »

  1.   

    你自己定义一个表的一个字段设置
    create table tb(a number(1))
    然后你再查一下对应这个表这个字段的长度是多少?
      

  2.   

    从USER_TAB_COLUMNS 这里取出来data_length 还是22
      

  3.   

    这个不是问题,通过DATA_PRECISION和DATA_SCALE就能取得实际长度和小数位数
    下面是我测试的过程,楼主看下?
    SQL> desc emp
     Name                                                  Null?    Type
     ----------------------------------------------------- -------- -------------------
     EMPNO                                                 NOT NULL NUMBER(4)
     ENAME                                                          VARCHAR2(10)
     JOB                                                            VARCHAR2(9)
     MGR                                                            NUMBER(4)
     HIREDATE                                                       DATE
     SAL                                                            NUMBER(7,2)
     COMM                                                           NUMBER(7,2)
     DEPTNO                                                         NUMBER(2)
    SQL> select TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH,DATA_PRECISION,DATA_SCALE from user_tab_col
    s where table_name = 'EMP'; TABLE_NAME      COLUMN_NAME                    DATA_TYPE       DATA_LENGTH DATA_PRECISION DATA_SCALE
    --------------- ------------------------------ --------------- ----------- -------------- ----------
    EMP             EMPNO                          NUMBER                   22              4          0
    EMP             ENAME                          VARCHAR2                 10
    EMP             JOB                            VARCHAR2                  9
    EMP             MGR                            NUMBER                   22              4          0
    EMP             HIREDATE                       DATE                      7
    EMP             SAL                            NUMBER                   22              7          2
    EMP             COMM                           NUMBER                   22              7          2
    EMP             DEPTNO                         NUMBER                   22              2          08 rows selected.
      

  4.   

    number默认情况下,精度为38位,取值范围1~38之间
    它实际上是磁盘上的一个变长类型,会占用0~22 字节的存储空间.
    这个DATA_LENGTH可能是取的最大值22吧,我猜的!:-)
      

  5.   

    number默认情况下,精度为38位,取值范围1~38之间
    它实际上是磁盘上的一个变长类型,会占用0~22 字节的存储空间.
    这个DATA_LENGTH可能是取的最大值22吧,我猜的!:-)