Let's continue with Oracle's ODBC driver! It seems, that many column values are processed at the client side. It's a pity, because in this way the SQL statement contains less useful information.
REMARKS are omitted at all! (There is no join with ALL_COL_COMMENTS.) COLUMN_DEFs are omitted! Maybe, because ALL_TAB_COLUMNS.DATA_DEFAULT is a LONG? CHAR_OCTET_LENGTHs are omitted! The BUFFER_LENGTH for FLOATS looks dubious. How fit 8 bytes into 126 bits ... er ... vice versa: how fit 126 bits (the max. binary precision of FLOATs) into an 8 byte buffer? In addition to base tables, they provide the column information for SYNONYMS too. Steffen
Oracle ODBC 8.1.7: ================== MS ODBC Test 2.60.0905 ---------------------- Get Info All: SQL_DBMS_NAME = 17, 6, "Oracle" SQL_DBMS_VER = 18, 10, "08.01.0721" SQL_DM_VER = 171, 15, "03.52.6019.0000" SQL_DRIVER_NAME = 6, 11, "SQORA32.DLL" SQL_DRIVER_ODBC_VER = 77, 5, "03.51" SQL_DRIVER_VER = 7, 10, "08.01.0704" 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 DATA TYPE COLUMN BUFFER DECIMAL NUM_PREC NULLABLE REMARKS COLUMN SQL_DATA SQL_DATE CHAR_OCTET ORDINAL IS CAT SCHEM NAME NAME TYPE NAME SIZE LENGTH DIGITS RADIX DEF TYPE TIME_SUB LENGTH POSITION NULLABLE ----- ----- -------- --------------- ---- ------------ ------ ------ ------- -------- -------- ------- ------ -------- -------- ---------- -------- -------- "" TST TYPETEST CINTEGER 3 DECIMAL 38 40 0 10 0 "" "" 3 1 NO "" TST TYPETEST CNUMBER 8 DOUBLE PRECISION 0 40 <Null> 10 1 "" "" 8 2 YES "" TST TYPETEST CNUMBER_38_0 3 DECIMAL 38 40 0 10 1 "" "" 3 3 YES "" TST TYPETEST CNUMBER_11_2 3 DECIMAL 11 13 2 10 1 "" "" 3 4 YES "" TST TYPETEST CNUMBER_XX_2 3 DECIMAL 38 40 2 10 1 "" "" 3 5 YES "" TST TYPETEST CFLOAT 8 DOUBLE PRECISION 38 8 <Null> 10 1 "" "" 8 6 YES "" TST TYPETEST CFLOAT_11 8 DOUBLE PRECISION 4 8 <Null> 10 1 "" "" 8 7 YES "" TST TYPETEST CREAL 8 DOUBLE PRECISION 19 8 <Null> 10 1 "" "" 8 8 YES "" TST TYPETEST CDOUBLE_PRECISION 8 DOUBLE PRECISION 38 8 <Null> 10 1 "" "" 8 9 YES "" TST TYPETEST CDATE 93 DATE 19 16 <Null> <Null> 1 "" "" 9 3 10 YES "" TST TYPETEST CCHAR 1 CHAR 1 1 <Null> <Null> 1 "" "" 1 11 YES "" TST TYPETEST CVARCHAR 12 VARCHAR2 7 7 <Null> <Null> 1 "" "" 12 12 YES "" TST TYPETEST CVARCHAR2 12 VARCHAR2 7 7 <Null> <Null> 1 "" "" 12 13 YES 13 rows fetched from 18 columns. SELECT /*+ RULE */ '' , owner , table_name , column_name , 0 , data_type , data_precision , decode( data_type ,'DATE' , 16 ,'FLOAT' , 8 ,'LONG RAW', 2147483647 ,'LONG' , 2147483647 ,'CLOB' , 2147483647 ,'BLOB' , 2147483647 ,'BFILE' , 2147483647 ,'NUMBER' , NVL( data_precision + 2, 40 ) , data_length ) , data_scale , 0 , decode( nullable, 'Y', 1, 'N', 0 ) , '' , '' , 0 , 0 , 0 , column_id , decode( nullable, 'Y', 'YES', 'N', 'NO') FROM all_tab_columns WHERE TABLE_NAME LIKE 'TYPETES%' AND OWNER = 'TST' UNION SELECT /*+ RULE */ '' , b.owner , b.synonym_name , a.column_name , 0 , a.data_type , a.data_precision , a.data_length , a.data_scale , 0 , decode(a.nullable, 'Y', 1, 'N', 0) , '' , '' , 0 , 0 , 0 , a.column_id , decode(a.nullable, 'Y', 'YES', 'N', 'NO') FROM all_tab_columns a , all_synonyms b WHERE a.table_name = b.table_name and a.owner = b.table_owner AND b.synonym_name LIKE 'TYPETES%' AND b.OWNER = 'TST' ORDER BY 2,3,17