On Thu, Mar 22, 2001 at 05:05:36PM +0100, Steffen Goeldner wrote:
> Tim Bunce wrote:
> > 
> > I'd be interested to know what the Oracle ODBC driver returns for
> > various forms of Oracle NUMBER and happiest to do the same in DBD::Oracle.
> 
> Even, if the driver is very ugly? We have the chance to
> make it better!

Thanks for the info. Do you have any strong objections to DBD::Oracle
replicating the Oracle ODBC results?

Tim.

> Here our test table (I omit negative scale):
> 
> CREATE TABLE TypeTest
> (
>   cINTEGER           INTEGER
> , cNUMBER            NUMBER
> , cNUMBER_38_0       NUMBER ( 38, 0 )
> , cNUMBER_11_2       NUMBER ( 11, 2 )
> , cNUMBER_xx_2       NUMBER (  *, 2 )
> , cFLOAT             FLOAT
> , cFLOAT_11          FLOAT  ( 11 )
> , cREAL              REAL
> , cDOUBLE_PRECISION  DOUBLE PRECISION
> )
> /
> 
> SQL> desc typetest
>  Name               Null?    Type
>  ------------------ -------- ----------------
>  CINTEGER                    NUMBER(38)
>  CNUMBER                     NUMBER
>  CNUMBER_38_0                NUMBER(38)
>  CNUMBER_11_2                NUMBER(11,2)
>  CNUMBER_XX_2                NUMBER(38,2)
>  CFLOAT                      FLOAT(126)
>  CFLOAT_11                   NUMBER(11)
>  CREAL                       NUMBER(63)
>  CDOUBLE_PRECISION           FLOAT(126)
> 
>  Note: CFLOAT_11 (binary prec.) vs. NUMBER(11) (decimal prec.)
>        This seems to be a bug in SQL*Plus DESCRIBE.
> 
> Now the information from the data dictionary:
> 
> select COLUMN_NAME
>      , DATA_TYPE
>      , DATA_PRECISION
>      , DATA_SCALE
>   from dba_tab_columns
>  where table_name = 'TYPETEST'
>  order by COLUMN_ID 
> 
> COLUMN_NAME        DATA_TYPE  DATA_PRECI DATA_SCALE
> ------------------ ---------- ---------- ----------
> CINTEGER           NUMBER                         0
> CNUMBER            NUMBER                          
> CNUMBER_38_0       NUMBER             38          0
> CNUMBER_11_2       NUMBER             11          2
> CNUMBER_XX_2       NUMBER                         2
> CFLOAT             FLOAT             126           
> CFLOAT_11          FLOAT              11           
> CREAL              FLOAT              63           
> CDOUBLE_PRECISION  FLOAT             126           
> 
> The Oracle ODBC driver 8.1.7 returns (via DBD::ODBC! I hope
> they do not mangle the results!):
> 
> TYPE PRECISION SCALE NAME
> ---- --------- ----- ------------------
>    3        38     0 CINTEGER
>    8        38     0 CNUMBER
>    3        38     0 CNUMBER_38_0
>    3        11     2 CNUMBER_11_2
>    3        38     2 CNUMBER_XX_2
>    8        38     0 CFLOAT
>    8         4     0 CFLOAT_11
>    8        19     0 CREAL
>    8        38     0 CDOUBLE_PRECISION
> 
>  Note: Oracle returns decimal precision in all cases
>        (and not a binary prec. for FLOAT's).
> 
> 
> Steffen

Reply via email to