22

descテーブルが必要です。列のコメントを表示する操作。一部の人がこれを達成したのを見てきましたが、その方法がわかりませんでした。多分それはSQLDeveloperのバージョンに依存します、私のものは2.1.0.63です。データベースはOracle11gです。

これは、 descテーブルを実行するときに得られるものです。:

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

そして、私はこのようなものを手に入れたいと思います:

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

3 に答える 3

25

descコマンドは、ツールごとに解釈が異なります。それが行うことは、いくつかの標準的なOracleビューの選択を行うことです。

これは、目的の列データを提供するビューに対するクエリですが、*を選択して、使用可能なすべてを表示することをお勧めします。

ビューには、dba_ 、all_ 、およびuser_*の3種類のビューがあります。user_ *を使用するのは、スキーマ/ユーザーごとに使用できるためですが、そのスキーマ/ユーザーが所有するオブジェクトのみが一覧表示されます。dba_ビューは通常、dba専用であり、dbaがどれだけ信頼しているかによって、all_ビューが使用できる場合とできない場合があります。^ _ ^

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)
于 2012-06-06T11:03:38.030 に答える
5

これは、Oracle SQL Developer からの定義です (表の列ビューに示されているとおり)。

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
)
于 2016-04-06T10:32:03.953 に答える