2012-06-06 17 views
19

के साथ कॉलम की टिप्पणियां कैसे दिखाएं I desc तालिका चाहते हैं; कॉलम की टिप्पणियां दिखाने के लिए ऑपरेशन। मैंने देखा है कि कुछ लोगों ने इसे हासिल किया है, हालांकि मुझे पता नहीं चला कि कैसे। शायद यह एसक्यूएल डेवलपर संस्करण पर निर्भर करता है, मेरा 2.1.0.63 है। डाटाबेस ओरेकल 11 जी है।अवरोही

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 

उत्तर

24

desc आदेश विभिन्न उपकरणों के लिए अलग तरह से व्याख्या की है। यह कुछ मानक ओरेकल विचारों का चयन करता है।

यहां उन विचारों पर एक प्रश्न है जो वांछित कॉलम डेटा प्रदान करेंगे, लेकिन मैं आपको उपलब्ध सभी को देखने के लिए चुनिंदा * करने के लिए प्रोत्साहित करता हूं।

आपके पास 3 प्रकार के विचार हैं, dba_ , all_, और उपयोगकर्ता_ * विचार। मैं user_ * का उपयोग करता हूं क्योंकि यह प्रत्येक स्कीमा/उपयोगकर्ता के लिए उपलब्ध है, लेकिन यह केवल उस स्कीमा/उपयोगकर्ता के स्वामित्व वाली वस्तुओं को सूचीबद्ध करता है। 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

बेन सभी स्तंभों नहीं कहते हुए मेरी कोड संपादित एक टिप्पणी है और आप एक का उपयोग करना चाहिए बाहरी शामिल हों, लेकिन सभी स्तंभों में user_col_comments में एक रिकॉर्ड है – winkbrace

+0

ठीक है, यह वही नहीं है जो मैं चाहता था लेकिन यह काफी अच्छा है। धन्यवाद! :) – Guito

4

यहाँ Oracle SQL डेवलपर से परिभाषा (जैसा कि तालिका स्तंभ दृश्य में दिखाया गया है) है:

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 
)