Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

गतिशील एसक्यूएल के साथ तालिका संरचना प्राप्त करना

आपको यह तय करना होगा कि data_length . का उपयोग करना है या नहीं या data_precision data_type . के आधार पर , जिसे आप केस एक्सप्रेशन के साथ कर सकते हैं:

select listagg(column_name ||','|| data_type ||','||
  case 
    when data_type in ('VARCHAR2', 'NVARCHAR2', 'CHAR', 'RAW')
      then to_char(data_length)
    when data_type = 'NUMBER'
        and (data_precision is not null or data_scale is not null)
      then data_precision || case
        when data_scale > 0 then '.' || data_scale
      end
    end, ',') within group (order by column_id)
from all_tab_columns
where table_name = 'MYTABLENAME'
and owner = user -- if it is always current user, use user_tab_columns instead
/

अगर मैं उस तालिका को इस प्रकार बनाऊं:

create table mytablename (col1 varchar2(20), col2 number(2), col3 char(3), col4 date,
  col5 timestamp(3), col6 clob, col7 number(5,2));

तब वह क्वेरी उत्पन्न होती है:

COL1,VARCHAR2,20,COL2,NUMBER,2,COL3,CHAR,3,COL4,DATE,,COL5,TIMESTAMP(3),,COL6,CLOB,,COL7,NUMBER,5.2

इस उदाहरण में मैंने एक संख्या को परिशुद्धता . के रूप में दर्शाया है .पैमाना , लेकिन आपके पास चिंता करने के लिए तराजू नहीं हो सकते हैं, या उन्हें अलग तरह से संभालना चाह सकते हैं - यह निर्भर करता है कि परिणाम का उपयोग कैसे किया जाएगा। और मैंने बिना किसी आकार वाले डेटा प्रकारों के लिए एक खाली फ़ील्ड शामिल किया है, उदा। सीएलओबी और दिनांक।

यह भी ध्यान दें कि टाइमस्टैम्प (और अंतराल) में डेटा प्रकार में ही सटीकता शामिल होती है, इसलिए timestamp(3) सीधे उस कॉलम के data_type . से आ रहा है . समय क्षेत्र और अंतराल वाले टाइमस्टैम्प में डेटा प्रकार के नाम में रिक्त स्थान भी शामिल होते हैं।

तो यह एक प्रारंभिक बिंदु है, और आप इसे अन्य डेटा प्रकारों तक विस्तारित कर सकते हैं जिन्हें आपको विशिष्ट तरीकों से संभालने की आवश्यकता है, या (कहते हैं) टाइमस्टैम्प परिशुद्धता को एक अलग अल्पविराम से अलग फ़ील्ड में विभाजित करें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उपयोगकर्ताओं को तालिका से चयन करने की अनुमति देना

  2. कैसे सत्यापित करें कि sqlplus कनेक्ट हो सकता है?

  3. Oracle में प्राथमिक डेटाबेस के साथ स्टैंडबाय को सिंक करने के चरण

  4. Oracle (0x80004005)ORA-12154:TNS:कनेक्ट पहचानकर्ता को हल नहीं कर सका

  5. Oracle ट्रिगर जब क्लॉज उदाहरण