Let's begin with MS ODBC for Oracle!

The biggest problem is: it's a Level 2 driver:

 - the column names conform to Level 1
 - most Level 3 columns are missing
 - the old datatypes are used (DATE=11)

The REMARKS field is empty. I don't know if the driver or the test
tool purges that string.

The PRECISION = 15 for FLOATS is dubious. This value is defined in
the ODBC spec:

 <http://msdn.microsoft.com/library/en-us/odbc/htm/odbccolumn_size.asp>

(the purpose is unclear to me), but does not correspond to the
declared value.

The LENGTH for FLOATS looks dubious. How fit 8 bytes into 126 bits?

But the SQL (grabbed from V$SQLAREA) looks very interesting!


Steffen
MS ODBC for Oracle:
===================

MS ODBC Test 2.60.0905
----------------------

Get Info All:
  SQL_DBMS_NAME       =  17,  6, "Oracle"
  SQL_DBMS_VER        =  18, 69, "08.01.0000 Oracle8i Enterprise Edition Release 
8.1.7.2.1 - Production"
  SQL_DM_VER          = 171, 15, "03.52.6019.0000"
  SQL_DRIVER_NAME     =   6, 12, "msorcl32.dll"
  SQL_DRIVER_ODBC_VER =  77,  5, "02.50"
  SQL_DRIVER_VER      =   7, 11, "02.573.6019"
  SQL_ODBC_VER        =  10, 10, "03.52.0000"

SQLColumns:
  In:
    StatementHandle = 0x008A1860
    CatalogName     = SQL_NULL_HANDLE, NameLength1 = 0
    SchemaName      = "TST"          , NameLength2 = 3
    TableName       = "TYPETEST"     , NameLength3 = 8
    ColumnName      = SQL_NULL_HANDLE, NameLength4 = 0
  Return:
    SQL_SUCCESS     = 0

Get Data All:

TABLE     TABLE TABLE    COLUMN_NAME       DATA TYPE   PRECISION LENGTH SCALE   RADIX 
NULLABLE REMARKS ORDINAL
QUALIFIER OWNER NAME                       TYPE NAME                                   
                POSITION
--------- ----- -------- ----------------- ---- ------ --------- ------ ------ ------ 
-------- ------- --------
   <Null>   TST TYPETEST CINTEGER             3 NUMBER        38     40      0     10  
      0    ""          1
   <Null>   TST TYPETEST CNUMBER              3 NUMBER        15      8 <Null>     10  
      1 <Null>         2
   <Null>   TST TYPETEST CNUMBER_38_0         3 NUMBER        38     40      0     10  
      1 <Null>         3
   <Null>   TST TYPETEST CNUMBER_11_2         3 NUMBER        11     13      2     10  
      1 <Null>         4
   <Null>   TST TYPETEST CNUMBER_XX_2         3 NUMBER        38     40      2     10  
      1 <Null>         5
   <Null>   TST TYPETEST CFLOAT               8 FLOAT         15      8 <Null>     10  
      1 <Null>         6
   <Null>   TST TYPETEST CFLOAT_11            8 FLOAT         15      8 <Null>     10  
      1 <Null>         7
   <Null>   TST TYPETEST CREAL                8 FLOAT         15      8 <Null>     10  
      1 <Null>         8
   <Null>   TST TYPETEST CDOUBLE_PRECISION    8 FLOAT         15      8 <Null>     10  
      1 <Null>         9
   <Null>   TST TYPETEST CDATE               11 DATE          19     16      0     10  
      1 <Null>        10
   <Null>   TST TYPETEST CCHAR                1 CHAR           1      1 <Null> <Null>  
      1 <Null>        11
   <Null>   TST TYPETEST CVARCHAR            12 VARCHAR2       7      7 <Null> <Null>  
      1 <Null>        12
   <Null>   TST TYPETEST CVARCHAR2           12 VARCHAR2       7      7 <Null> <Null>  
      1 <Null>        13


select null
     , co.owner
     , co.table_name
     , co.column_name
     , decode( data_type
       , 'CHAR'    ,  1
       , 'DATE'    , 11
       , 'FLOAT'   ,  8
       , 'LONG'    , -1
       , 'LONG RAW', -4
       , 'NUMBER'  ,  3
       , 'RAW'     , -3
       , 'VARCHAR2', 12
       , 'ROWID'   ,  1
       , 0
       )
     , data_type
     , decode( data_type
       , 'DATE'    , 19
       , 'FLOAT'   , 15
       , 'LONG'    , 2147483647
       , 'LONG RAW', 2147483647
       , 'ROWID'   , 18
       , 'NUMBER'  , decode( data_precision
                     , null, decode( data_scale
                             , null, 15
                             , 0   , 38
                             , 38
                             )
                     , data_precision
                     )
       , data_length
       )
     , decode( data_type
       , 'LONG'    , 2147483647
       , 'FLOAT'   , 8
       , 'NUMBER'  , decode( data_precision
                     , null, decode( data_scale
                             , null, 8
                             , 0   , 40
                             , 40
                             )
                     , data_precision + 2
                     )
       , 'DATE'    , 16
       , 'ROWID'   , 18
       , data_length
       )
     , decode( data_type
       , 'DATE'    , 0
       , 'FLOAT'   , null
       , data_scale
       )
     , decode( data_type
       , 'NUMBER'  , 10
       , 'FLOAT'   , 10
       , 'DATE'    , 10
       , null
       )
     , decode( nullable
       , 'N', 0
       , 'Y', 1
       , 2
       )
     , cm.comments
     , co.column_id
  from all_tab_columns  co
     , all_col_comments cm
 where co.table_name    = cm.table_name
   and co.column_name   = cm.column_name
   and co.owner         = cm.owner
   and co.owner      like 'TST' escape '\'
   and co.table_name like 'TYPETEST' escape '\'
order by 1, 2, 3, 13

Reply via email to