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

तालिका कॉलम प्रारूप में ओरेकल कॉलम नाम लौटाएं?

ऐसा करने के लिए Oracle में कोई "विकल्प" नहीं है; आप हो सकता है एक क्लाइंट ढूंढने में सक्षम हो जो आपको ऐसा करने की अनुमति देता है क्योंकि यह एक ऐसा काम है जो आमतौर पर क्लाइंट में किया जाता है; मैं एक के बारे में नहीं जानता।

tbone's answer पर विस्तार करने के लिए आपको इसे गतिशील रूप से करना होगा। यह नहीं इसका मतलब है कि आपको हर कॉलम को सूचीबद्ध करना होगा। आप डेटा डिक्शनरी का उपयोग करेंगे , विशेष रूप से all_tab_columns या user_tab_columns अपनी क्वेरी बनाने के लिए। अपनी इच्छित सटीक परिभाषा के साथ एक दृश्य बनाना आसान होगा ताकि आप चाहें तो उसका पुन:उपयोग कर सकें।

उद्देश्य इस तथ्य का उपयोग करना है कि कॉलम का उपयोग करने के लिए एक क्वेरी बनाने के लिए कॉलम अस्तित्व को एक स्ट्रिंग के रूप में एक तालिका में संग्रहीत किया जाता है। चूंकि कॉलम नाम और टेबल नाम स्ट्रिंग्स के रूप में संग्रहीत होते हैं, इसलिए आप आसानी से एक क्वेरी या डीडीएल स्टेटमेंट बनाने के लिए स्ट्रिंग एग्रीगेशन तकनीकों का उपयोग कर सकते हैं, जिसे आप मैन्युअल रूप से या गतिशील रूप से निष्पादित कर सकते हैं।

अगर आप Oracle 11g रिलीज़ 2 का उपयोग कर रहे हैं तो listagg फ़ंक्शन आपकी सहायता के लिए उपलब्ध है:

select 'create or replace view my_view as 
        select '
      || listagg( table_name || '.' || column_name 
               || ' as ' 
               || substr(table_name,1,1) || '_' 
               || column_name, ', ')
        within group 
         ( order by case when table_name = 'FOO' then 0 else 1 end
                  , column_id
          )
       || ' from foo f
            join bar b
              on f.id = b.foo_id'
  from user_tab_columns
 where table_name in ('FOO','BAR')
        ;

इस तालिका संरचना को मानते हुए:

create table foo ( id number, a number, b number, c number);
create table bar ( foo_id number, a number, b number, c number);

यह एकल क्वेरी निम्नलिखित उत्पन्न करती है:

create or replace view my_view as 
 select FOO.ID as F_ID, FOO.A as F_A, FOO.B as F_B, FOO.C as F_C
      , BAR.FOO_ID as B_FOO_ID, BAR.A as B_A, BAR.B as B_B, BAR.C as B_C 
   from foo f 
   join bar b on f.id = b.foo_id

और यह रहा एक SQL Fiddle इसे साबित करने के लिए।

आप 11.2 का उपयोग नहीं कर रहे हैं, तो आप अनिर्दिष्ट फ़ंक्शन का उपयोग करके बिल्कुल वही परिणाम प्राप्त कर सकते हैं wm_concat या उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन stragg , जिसे टॉम कायटे ने बनाया था। Oracle बेस में स्ट्रिंग एग्रीगेशन तकनीक पर एक लेख है। और स्टैक ओवरफ्लो पर कई पोस्ट हैं।

एक छोटे से परिशिष्ट के रूप में आप वास्तव में वही बना सकते हैं जो आप उपरोक्त क्वेरी में एक छोटे से बदलाव के साथ खोज रहे हैं। आप उद्धृत पहचानकर्ता का उपयोग कर सकते हैं TABLE_NAME.COLUMN_NAME . में एक कॉलम बनाने के लिए प्रारूप। आपके पास है इसे . . के रूप में उद्धृत करने के लिए Oracle में किसी ऑब्जेक्ट नाम के लिए मान्य वर्ण नहीं है। इसका फायदा यह है कि आपको वही मिलता है जो आप चाहते हैं। नकारात्मक पक्ष यह है कि यदि आप select * from ... का उपयोग नहीं करते हैं तो बनाए गए दृश्य को क्वेरी करना एक बहुत बड़ा दर्द है; नामित स्तंभों का चयन करने के लिए आवश्यकता होगी उन्हें उद्धृत किया जाना है।

select 'create or replace view my_view as
        select '
      || listagg( table_name || '.' || column_name 
               || ' as ' 
               || '"' || table_name || '.'
               || column_name || '"', ', ')
        within group 
         ( order by case when table_name = 'FOO' then 0 else 1 end
                  , column_id
          )
       || ' from foo f
            join bar b
              on f.id = b.foo_id'
  from user_tab_columns
 where table_name in ('FOO','BAR')
        ;

यह क्वेरी वापस आती है :

create or replace view my_view as 
 select FOO.ID as "FOO.ID", FOO.A as "FOO.A", FOO.B as "FOO.B", FOO.C as "FOO.C"
      , BAR.FOO_ID as "BAR.FOO_ID", BAR.A as "BAR.A"
      , BAR.B as "BAR.B", BAR.C as "BAR.C"
   from foo f 
   join bar b on f.id = b.foo_id


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. संग्रह और व्यवस्था पर Oracle तालिका अभिव्यक्ति

  2. अंदर शामिल होने का व्यवहार अंदर मौजूद है sql

  3. तालिका नाम और संबंधित गिनती सूचीबद्ध करने के लिए ओरेकल प्रक्रिया

  4. डेटाटेबल से OracleDataAdapter का उपयोग करके Oracle तालिका में रिकॉर्ड अपडेट और सम्मिलित करें

  5. odp.net डीबी अधिसूचना बदलें