1)dba_tab_columns/dba_tab_cols

 
  1. SELECT * 
  2.   FROM Dba_Tab_Cols 
  3.  WHERE Table_Name = Upper('test_table_01'); 
  4.  
  5. SELECT * 
  6.   FROM Dba_Tab_Columns 
  7.  WHERE Table_Name = Upper('test_table_01'); 

查询这两个视图需要dba权限,dba_tab_columns基于dba_tab_cols,比如隐藏列,后者更全面:

 
  1. create or replace view sys.dba_tab_columns as 
  2. select OWNER, TABLE_NAME, 
  3.        COLUMN_NAME, DATA_TYPE, DATA_TYPE_MOD, DATA_TYPE_OWNER, 
  4.        DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLE, COLUMN_ID, 
  5.        DEFAULT_LENGTH, DATA_DEFAULT, NUM_DISTINCT, LOW_VALUE, HIGH_VALUE, 
  6.        DENSITY, NUM_NULLS, NUM_BUCKETS, LAST_ANALYZED, SAMPLE_SIZE, 
  7.        CHARACTER_SET_NAME, CHAR_COL_DECL_LENGTH, 
  8.        GLOBAL_STATS, USER_STATS, AVG_COL_LEN, CHAR_LENGTH, CHAR_USED, 
  9.        V80_FMT_IMAGE, DATA_UPGRADED 
  10.   from DBA_TAB_COLS 
  11.  where HIDDEN_COLUMN = 'NO'
  12.  
  13.  
  14.  
  15. create or replace view sys.dba_tab_cols as 
  16. select u.name, o.name
  17.        c.name
  18.        decode(c.type#, 1, decode(c.charsetform, 2, 'NVARCHAR2''VARCHAR2'), 
  19.                        2, decode(c.scale, null
  20.                                  decode(c.precision#, null'NUMBER''FLOAT'), 
  21.                                  'NUMBER'), 
  22.                        8, 'LONG'
  23.                        9, decode(c.charsetform, 2, 'NCHAR VARYING''VARCHAR'), 
  24.                        12, 'DATE', 23, 'RAW', 24, 'LONG RAW'
  25.                        58, nvl2(ac.synobj#, (select o.name from obj$ o 
  26.                                 where o.obj#=ac.synobj#), ot.name), 
  27.                        69, 'ROWID'
  28.                        96, decode(c.charsetform, 2, 'NCHAR''CHAR'), 
  29.                        105, 'MLSLABEL'
  30.                        106, 'MLSLABEL'
  31.                        111, nvl2(ac.synobj#, (select o.name from obj$ o 
  32.                                  where o.obj#=ac.synobj#), ot.name), 
  33.                        112, decode(c.charsetform, 2, 'NCLOB''CLOB'), 
  34.                        113, 'BLOB', 114, 'BFILE', 115, 'CFILE'
  35.                        121, nvl2(ac.synobj#, (select o.name from obj$ o 
  36.                                  where o.obj#=ac.synobj#), ot.name), 
  37.                        122, nvl2(ac.synobj#, (select o.name from obj$ o 
  38.                                  where o.obj#=ac.synobj#), ot.name), 
  39.                        123, nvl2(ac.synobj#, (select o.name from obj$ o 
  40.                                  where o.obj#=ac.synobj#), ot.name), 
  41.                        178, 'TIME(' ||c.scale|| ')'
  42.                        179, 'TIME(' ||c.scale|| ')' || ' WITH TIME ZONE'
  43.                        180, 'TIMESTAMP(' ||c.scale|| ')'
  44.                        181, 'TIMESTAMP(' ||c.scale|| ')' || ' WITH TIME ZONE'
  45.                        231, 'TIMESTAMP(' ||c.scale|| ')' || ' WITH LOCAL TIME ZONE'
  46.                        182, 'INTERVAL YEAR(' ||c.precision#||') TO MONTH'
  47.                        183, 'INTERVAL DAY(' ||c.precision#||') TO SECOND(' || 
  48.                              c.scale || ')'
  49.                        208, 'UROWID'
  50.                        'UNDEFINED'), 
  51.        decode(c.type#, 111, 'REF'), 
  52.        nvl2(ac.synobj#, (select u.name from user$ u, obj$ o 
  53.             where o.owner#=u.userand o.obj#=ac.synobj#), ut.name), 
  54.        c.length, c.precision#, c.scale, 
  55.        decode(sign(c.null$),-1,'D', 0, 'Y''N'), 
  56.        decode(c.col#, 0, to_number(null), c.col#), c.deflength, 
  57.        c.default$, h.distcnt, h.lowval, h.hival, h.density, h.null_cnt, 
  58.        decode(h.row_cnt, 0, 1, 1, 1, h.row_cnt-1), h.timestamp#, h.sample_size, 
  59.        decode(c.charsetform, 1, 'CHAR_CS'
  60.                              2, 'NCHAR_CS'
  61.                              3, NLS_CHARSET_NAME(c.charsetid), 
  62.                              4, 'ARG:'||c.charsetid), 
  63.        decode(c.charsetid, 0, to_number(NULL), 
  64.                            nls_charset_decl_len(c.length, c.charsetid)), 
  65.        decode(bitand(h.spare2, 2), 2, 'YES''NO'), 
  66.        decode(bitand(h.spare2, 1), 1, 'YES''NO'), 
  67.        h.avgcln, 
  68.        c.spare3, 
  69.        decode(c.type#, 1, decode(bitand(c.property, 8388608), 0, 'B''C'), 
  70.                       96, decode(bitand(c.property, 8388608), 0, 'B''C'), 
  71.                       null), 
  72.        decode(bitand(ac.flags, 128), 128, 'YES''NO'), 
  73.        decode(o.status, 1, decode(bitand(ac.flags, 256), 256, 'NO''YES'), 
  74.                         decode(bitand(ac.flags, 2), 2, 'NO'
  75.                                decode(bitand(ac.flags, 4), 4, 'NO'
  76.                                       decode(bitand(ac.flags, 8), 8, 'NO'
  77.                                              'N/A')))), 
  78.        decode(c.property, 0, 'NO', decode(bitand(c.property, 32), 32, 'YES'
  79.                                           'NO')), 
  80.        decode(c.property, 0, 'NO', decode(bitand(c.property, 8), 8, 'YES'
  81.                                           'NO')), 
  82.        decode(c.segcol#, 0, to_number(null), c.segcol#), c.intcol# 
  83. from sys.col$ c, sys.obj$ o, sys.hist_head$ h, sys.user$ u, 
  84.      sys.coltype$ ac, sys.obj$ ot, sys.user$ ut 
  85. where o.obj# = c.obj# 
  86.   and o.owner# = u.user
  87.   and c.obj# = h.obj#(+) and c.intcol# = h.intcol#(+) 
  88.   and c.obj# = ac.obj#(+) and c.intcol# = ac.intcol#(+) 
  89.   and ac.toid = ot.oid$(+) 
  90.   and ot.type#(+) = 13 
  91.   and ot.owner# = ut.user#(+) 
  92.   and (o.type# in (3, 4)                                     /* cluster, view */ 
  93.        or 
  94.        (o.type# = 2     /* tables, excluding iot - overflow and nested tables */ 
  95.         and 
  96.         not exists (select null 
  97.                       from sys.tab$ t 
  98.                      where t.obj# = o.obj# 
  99.                        and (bitand(t.property, 512) = 512 or 
  100.                             bitand(t.property, 8192) = 8192)))); 

 

2)user_tab_columns/user_tab_cols

    和dba视图类似,但只能查当前用户的表:

 
  1. SELECT *  
  2.   FROM User_Tab_Cols  
  3.  WHERE Table_Name = Upper('test_table_01');  
  4.   
  5. SELECT *  
  6.   FROM User_Tab_Columns  
  7.  WHERE Table_Name = Upper('test_table_01');  

 

3)all_tab_columns/all_tab_cols

    类似,这个能查询所有用户的表,不过个人感觉检索速度慢得多:

 
  1. SELECT *   
  2.   FROM All_Tab_Cols   
  3.  WHERE Table_Name = Upper('test_table_01');   
  4.    
  5. SELECT *   
  6.   FROM All_Tab_Columns   
  7.  WHERE Table_Name = Upper('test_table_01');   

 

 

另:

    xxx_tab_comments 可以查询表注释;

    xxx_tab_statistics 可以查询列统计信息;

    xxx_tab_privs 和 xxx_tab_privs_recd 可以查询该表授权信息;