2012-06-06 9 views
19

Quiero la tabla de descripciones ; operación para mostrar los comentarios de las columnas. He visto que algunas personas lograron esto, sin embargo, no pude averiguar cómo. Tal vez depende de la versión de SQL Developer, la mía es 2.1.0.63. La base de datos es Oracle 11g.Cómo mostrar comentarios de una columna con operación de descifrado

Esto es lo que obtengo cuando hago tabla desc;:

Desc table; 
    Name    Nullable Type 
    ------------------- -------- ----- 
    ID     NOT NULL NUMBER(38) 
    ITEM_ID      NUMBER(38) 

Y me gustaría conseguir algo como esto:

Desc table; 
    Name    Nullable Type  Comment 
    ------------------- -------- ---------- --------------------------------- 
    ID     NOT NULL NUMBER(38) Table's id 
    ITEM_ID      NUMBER(38) Reference to an item 

Respuesta

24

el comando desc se interpreta de forma diferente para diferentes herramientas. Lo que hace es seleccionar algunas vistas estándar de Oracle.

Aquí hay una consulta sobre esas vistas que proporcionarán los datos de columna deseados, pero lo animo a hacer una selección * para ver todo lo que está disponible.

Tiene 3 tipos de vistas, dba_ , all_ y user_ * views. Uso user_ * porque está disponible para cada esquema/usuario, pero solo muestra los objetos que pertenecen a ese esquema/usuario. Las vistas de dba_ son típicamente solo para dba, y las all_ views pueden o no estar disponibles para usted dependiendo de cuánto le confíen los dba.^_^

select tc.column_name 
,  tc.nullable 
,  tc.data_type || case when tc.data_type = 'NUMBER' and tc.data_precision is not null then '(' || tc.data_precision || ',' || tc.data_scale || ')' 
          when tc.data_type like '%CHAR%' then '(' || tc.data_length || ')' 
          else null 
         end type 
,  cc.comments 
from user_col_comments cc 
join user_tab_columns tc on cc.column_name = tc.column_name 
          and cc.table_name = tc.table_name 
where cc.table_name = upper(:tablename) 
+1

Ben editado mi código declarando no todas las columnas tienen un comentario y se debe utilizar una combinación externa, pero todas las columnas tienen un registro en la vista user_col_comments – winkbrace

+0

Bueno, no es exactamente lo que quería, pero es lo suficientemente bueno. ¡Gracias! :) – Guito

4

Aquí es la definición de Oracle SQL Developer (como se muestra en la vista de columna de la tabla):

SELECT "COLUMN_NAME", "DATA_TYPE", "NULLABLE", "DATA_DEFAULT", "COLUMN_ID", "COMMENTS" FROM(
select c.column_name, case when data_type = 'CHAR'  then  data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'  
          when data_type = 'VARCHAR' then  data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'  
          when data_type = 'VARCHAR2' then  data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'  
          when data_type = 'NCHAR' then  data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'  
          when data_type = 'NUMBER' then  
            case when c.data_precision is null and c.data_scale is null then   'NUMBER' 
            when c.data_precision is null and c.data_scale is not null then   'NUMBER(38,'||c.data_scale||')' 
            else   data_type||'('||c.data_precision||','||c.data_SCALE||')'  end  
          when data_type = 'NVARCHAR' then  data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'  
          when data_type = 'NVARCHAR2' then  data_type||'('||c.char_length||decode(char_used,'B',' BYTE','C',' CHAR',null)||')'  
          else  data_type end data_type, 
    decode(nullable,'Y','Yes','No') nullable, 
c.DATA_DEFAULT,column_id, com.comments   
    from sys.Dba_tab_Columns c, 
     sys.Dba_col_comments com 
    where c.owner  = :OBJECT_OWNER 
    and c.table_name = :OBJECT_NAME 
    and c.table_name = com.table_name 
    and c.owner = com.owner 
    and c.column_name = com.column_name     
    order by column_id 
) 
Cuestiones relacionadas