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

किसी भी दृश्य या किसी अन्य तालिका प्रकार के साथ गतिशील कॉलम नाम और गतिशील डेटा प्रकार के साथ ऑरैकल में गतिशील तालिका कैसे बनाएं?

आप EXECUTE IMMEDIATE . में अर्धविराम का उपयोग नहीं कर सकते सिंगल स्टेटमेंट के लिए

यहां दस्तावेज़ीकरण से एक उद्धरण दिया गया है :

EXECUTE IMMEDIATE . से अर्धविराम हटाएं ।

execute immediate 'create table smap1(nam varchar2(10));'; -- this is your code
execute immediate 'create table smap1(nam varchar2(10))';  -- correct code, no semicolon at end

लेकिन एक और समस्या है।

आपको यह समझने की आवश्यकता है कि प्रतिस्थापन चर (&variable . कैसे होते हैं ) काम करता है

SQL*Plus केवल एक बार प्रतिस्थापन चर के लिए संकेत देगा:स्क्रिप्ट के संकलन से ठीक पहले, इसे चलाने से पहले। और फिर वेरिएबल्स को स्क्रिप्ट में शब्दशः बदल दिया जाता है, जिसके बाद इसे संकलित और निष्पादित किया जाएगा।

उदाहरण के लिए, जब आप अपनी स्क्रिप्ट चलाते हैं, तो SQL*Plus यह मानता है कि दो अज्ञात अक्षर हैं (&colname और &coldata ), और आपके लिए संकेत देगा। अगर आप उनके लिए 'आयु' और 'नंबर' मान देते हैं, तो SQL*Plus इस तरह स्क्रिप्ट को फिर से लिखेगा:

declare
    -- omitted to add clarity
begin
    execute immediate 'create table smap1(nam varchar2(10));';
    if(no_of_cols>=2) then
        for i in 2..no_of_cols loop
            colname:=age;
            coldata:=number;
            execute immediate 'alter table smapl add '||colname||' '||coldata;  
        end loop;
    end if;
end;

इसलिए यदि आप एक चर के लिए एक स्ट्रिंग अक्षर निर्दिष्ट करना चाहते हैं, और आप उस स्ट्रिंग को एक प्रतिस्थापन चर से प्राप्त करना चाहते हैं, तो आपको यह करने की आवश्यकता है:

colname varchar2(30) := '&colname'; -- notice the single quotes

मान लें कि आपने colname . के लिए 'आयु' प्रदान की है एसक्यूएल*प्लस खुशी-खुशी इसे इसमें बदल देगा:

colname varchar2(30) := 'age';

इसलिए, लूप के अंदर एक प्रतिस्थापन चर रखने से SQL*Plus बार-बार आपको इसके मूल्य के लिए संकेत नहीं देगा



  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. Java 1.6 और Oracle JDBC 14 setQueryTimeout काम नहीं कर रहा है

  3. Oracle स्पूल फ़ाइल को .txt फ़ाइल में। शीर्षकों के लिए विकल्प

  4. शीर्ष 9 उपयोगी Oracle ऐप्स प्रिंटर प्रश्न

  5. ट्रिगर के साथ भौतिक दृश्य?