Search notes:

Oracle: X$KQFCO

select
   tab.kqftanam            tab_name,
   col.kqfconam            col_name,
   decode (col.kqfcotyp,
      0, 'hex string',
      1, 'varchar2',
      2, 'number',
     11, 'word',
     12, 'datetime' ,
     23, 'raw',
         'other'
   )                       col_col_type,
   decode (col.kqfcodty,
       1, 'varchar2'  ,
       2, 'number'    ,
      12, 'date'      ,
      23, 'raw'       ,
     112, 'clob'      ,
     180, 'ts'        ,
     181, 'ts with tz',
           col.kqfcodty)   col_data_type,
   col.kqfcosiz            col_size,
   col.kqfcolsz            col_size_, -- ??
   --
   case when col.kqfcoidx > 0 then col.kqfcoidx  end    col_index_nr ,    -- If kqfcoidx <> 0, column is indexed (See v$indexed_fixed_column)
   case when col.kqfcoidx > 0 then col.kqfcoipo  end    col_index_pos,
   --
   col.kqfcooff            col_offset,
   col.kqfcodty            col_data_type_nr,
   col.kqfcotyp            col_type,
   tab.kqftaver            tab_version,
   tab.kqftatyp            tab_type,
   tab.kqftaflg            tab_flags,
   tab.kqftacoc            tab_coc,
   col.kqfcomax            col_max,
   col.kqfcotob            tab_obj,           --  tab.kqftaobj
   col.kqfcotab,
   col.kqfcolof            col_of,
   col.indx                col_indx,
   tab.indx                tab_indx,
   col.kqfcocno            col_no,
-- col.inst_id,  tab.inst_id,
-- col.con_id ,  tab.con_id,
   tab.kqftarsz                                   tab_rowsize, -- ?
   sum(col.kqfcosiz) over (partition by tab.indx) sum_col_size,
   to_number(col.addr, 'xxxxxxxxxxxxxxxx')        col_addr,
   to_number(tab.addr, 'xxxxxxxxxxxxxxxx')        tab_addr
from
   x$kqfco col                                join 
   x$kqfta tab on col.kqfcotab = tab.indx
where
  tab.kqftanam = 'X$KQFTA'
           --    'X$KSUPL'     -- Table with three indexes
           --    'X$KESWXMON'  -- Table with combined index
order by
   tab_name,
   col_no
;

See also

fixed tables

Index