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

ओरेकल डेटाबेस में तत्काल निष्पादन के साथ तालिका डीडीएल कैसे चलाएं

तत्काल निष्पादित करके तालिका DDL बनाएं

आप सोच रहे होंगे कि CREATE TABLE DDL को क्रियान्वित करने में क्या परेशानी हो सकती है? ठीक है, जब तक आप उन्हें SQL के साथ निष्पादित कर रहे हैं, तब तक कोई परेशानी नहीं है। लेकिन जब उन्हें PL/SQL के साथ क्रियान्वित करने की बात आती है तो यह एक तरह से कठिन होता है।

तो सबसे पहले, Oracle डेटाबेस में DDL स्टेटमेंट क्या हैं?

DDL,डेटा परिभाषा भाषा के लिए खड़ा है। डीडीएल स्टेटमेंट का उपयोग करके हम डेटाबेस ऑब्जेक्ट्स के साथ-साथ स्कीमा भी बना या संशोधित कर सकते हैं। ये कथन हैं:

  • बनाएं,
  • ड्रॉप और
  • बदलें।

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

नेटिव डायनेमिक एसक्यूएल हमें अपने पीएल/एसक्यूएल के माध्यम से डीडीएल या डीएमएल जैसे एसक्यूएल स्टेटमेंट्स को निष्पादित करने में सक्षम बनाता है।

हम PL/SQL प्रोग्राम के माध्यम से DDL निष्पादित क्यों नहीं कर सकते?

यदि आप अभी भी सोच रहे हैं कि क्या पीएल/एसक्यूएल के साथ डीडीएल स्टेटमेंट निष्पादित करना इतना जटिल है, तो आइए पीएल/एसक्यूएल प्रोग्राम के माध्यम से एक टेबल बनाने का प्रयास करें।

SET SERVEROUTPUT ON;
BEGIN 
    CREATE TABLE tut_82 (
    tut_num NUMBER(3),
    tut_name   VARCHAR2 (50));  
END;
/

मुझे पता है कि यह दृष्टिकोण आपका पहला विचार होता अगर मैंने आपको पीएल/एसक्यूएल प्रोग्राम के माध्यम से एक टेबल बनाने के लिए कहा होता। मेरा मतलब है, यह सही लग रहा है, क्या गलत हो सकता है?

इस कार्यक्रम में कुछ भी गलत नहीं है, यहाँ एकमात्र समस्या यह है कि PL/SQL सीधे DDL कथनों का समर्थन नहीं करता है। PL/SQL का उपयोग करके DDL स्टेटमेंट को निष्पादित करने के लिए हमें या तो DBMS_SQL पैकेज या NATIVE DYNAMIC SQL के उन्नत और बेहतर तरीके की मदद लेनी होगी।

यह आप खुद देख सकते हैं। आगे बढ़ो और उपरोक्त कार्यक्रम को निष्पादित करें। निष्पादन पर आपको एक त्रुटि मिलेगी जो नीचे दी गई तस्वीर में दिखाए गए जैसा कुछ दिखती है।

तो, PL/SQL प्रोग्राम के माध्यम से DDL को क्रियान्वित करने का उचित तरीका क्या है?

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

Oracle Database में Execute Immediate का उपयोग करके CREATE TABLE DDL कैसे निष्पादित करें?

चरण 1:अपना डीडीएल पहले से तैयार कर लें।

हालांकि यह आवश्यक नहीं है, लेकिन मेरा सुझाव है कि आप अपना डीडीएल पहले से तैयार कर लें, इस तरह आप कम से कम अपने डीडीएल स्टेटमेंट के सिंटैक्स के कारण वाक्यात्मक त्रुटि होने की संभावना को समाप्त कर सकते हैं।

हमारे मामले में, हम एक क्रिएट टेबल डीडीएल निष्पादित करना चाहते हैं, तो चलिए पहले एक टेबल बनाने के लिए एक डीडीएल लिखते हैं।

CREATE TABLE tut_82 (
    tut_num    NUMBER (3),
    tut_name   VARCHAR2 (50)
) 

यह DDL स्टेटमेंट tut_82 नाम के साथ एक टेबल बनाएगा जिसमें NUMBER डेटा प्रकार के दो कॉलम tut_num और VARCHAR2 डेटा प्रकार के tut_name होंगे।

ध्यान दें, अपने SQL कथन (जिसे आप तत्काल तत्काल चलाना चाहते हैं) को अर्धविराम से समाप्त न करें।

चरण 2:तत्काल निष्पादित करें का उपयोग करके अपने डीडीएल को पीएल/एसक्यूएल प्रोग्राम के माध्यम से चलाएं।

एक बार जब आप अपना डीडीएल तैयार कर लेते हैं तो आपको अपना पीएल/एसक्यूएल प्रोग्राम लिखना होता है।

SET SERVEROUTPUT ON;
DECLARE
    ddl_qry     VARCHAR2 (150);
BEGIN
    ddl_qry := 'CREATE TABLE tut_82(
                tut_num     NUMBER(3),
                tut_name    VARCHAR2(50)
                )';
    EXECUTE IMMEDIATE ddl_qry;
END;
/

उपरोक्त PL/SQL ब्लॉक में हमने ddl_qry नाम से एक वैरिएबल घोषित किया है। हमने इस वेरिएबल का उपयोग अपने डीडीएल स्टेटमेंट को रखने के लिए किया था जिसे हमने चरण 1 में तैयार किया था।

जानकारी:
एक बात जो आपको यहां सुनिश्चित करनी है, वह यह है कि, जिस चर का उपयोग आप SQL कथन को धारण करने के लिए करेंगे, जिसे आप अपने तत्काल तत्काल विवरण के साथ चलाना चाहते हैं हमेशा VARCHAR2 डेटा प्रकार का होना चाहिए और उनके पास डेटा की बहुत अधिक चौड़ाई है ताकि आपका डीडीएल आसानी से उसमें फिट हो सके।

इस पीएल/एसक्यूएल ब्लॉक के निष्पादन खंड में हमारे पास दो निष्पादन योग्य कथन हैं। ये कथन हैं:

विवरण 1:असाइनमेंट विवरण

पहले स्टेटमेंट में हमने अपने क्रिएट टेबल डीडीएल को असाइनमेंट ऑपरेटर का उपयोग करके वेरिएबल ddl_qry में स्टोर किया है (पीएल/एसक्यूएल में असाइनमेंट ऑपरेटर कोलन का संयोजन है और साइन के बराबर है)।

विवरण 2:द माइटी एक्ज़िक्यूट इमीडिएट स्टेटमेंट

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

आप चाहें तो 'Reserved Phrase' मुहावरे के ठीक बाद अपना DDL भी लिख सकते हैं। यह पूरी तरह से व्यक्तिगत पसंद है। मैं पूर्व दृष्टिकोण का उपयोग करना पसंद करता हूं जहां हम डीडीएल रखने के लिए वैरिएबल का उपयोग करते हैं क्योंकि सबसे पहले यह आपके कोड को साफ और साफ दिखता है इसके अलावा यह त्रुटि ट्रेसिंग को बहुत आसान बनाता है।

लेकिन मनीष, मैं डीडीएल स्टेटमेंट लिखने का दूसरा तरीका भी सीखना चाहता हूं।

ज़रूर, कुछ नया सीखने में कोई बुराई नहीं है।

BEGIN
    EXECUTE IMMEDIATE 'CREATE TABLE tut_82(
                	tut_num     NUMBER(3),
                	tut_name    VARCHAR2(50)
                )';
END;
/

उपरोक्त कोड का वैकल्पिक तरीका यह है कि डीडीएल स्टेटमेंट को अपने एक्ज़िक्यूट इमीडिएट स्टेटमेंट के भीतर ही लिखें। इसके लिए आपको बस पहले आरक्षित वाक्यांश Execute Immediate और उसके बाद DDL स्टेटमेंट लिखना होगा जिसे आप गतिशील रूप से निष्पादित करना चाहते हैं।

दोनों में से किसी भी तरह से आपको तत्काल निष्पादन के लिए डीडीएल लिखते समय कुछ बातों का ध्यान रखना होगा।

पहला:हमेशा अपने SQL स्टेटमेंट को सिंगल कोट्स की एक जोड़ी में संलग्न करें

हमेशा याद रखें कि Execute Immediate DDL या DML या किसी अन्य समर्थित SQL कथन को मानता है जिसे आप गतिशील रूप से VARCHAR2 डेटा प्रकार की एक स्ट्रिंग के रूप में निष्पादित करना चाहते हैं। और PL/SQL में हम किसी भी वर्ण या VARCHAR2 स्ट्रिंग को सिंगल कोट्स की एक जोड़ी में संलग्न करते हैं। इस प्रकार हमेशा अपने SQL कथन को संलग्न करना सुनिश्चित करें जिसे आप निष्पादन तत्काल का उपयोग करके एकल उद्धरणों की एक जोड़ी में चलाना चाहते हैं।

दूसरा:सेमी-कोलन का ध्यान रखें।

यदि आप तत्काल निष्पादित करने के लिए एक SQL कथन लिख रहे हैं तो आपको अर्धविराम (;) को एकल उद्धरणों के ठीक बाहर रखना होगा जिसमें आपने अपना SQL कथन संलग्न किया था। दूसरी ओर यदि आप तत्काल निष्पादन का उपयोग करके गतिशील निष्पादन के लिए पीएल/एसक्यूएल ब्लॉक लिख रहे हैं तो आपको अर्धविराम को अपने पीएल/एसक्यूएल ब्लॉक के अंत में क्लोजिंग सिंगल कोट के साथ-साथ क्लोजिंग सिंगल कोट्स के ठीक पहले रखना होगा।

यह Oracle डेटाबेस में नेटिव डायनेमिक SQL के EXECUTE IMMEDIATE स्टेटमेंट का उपयोग करके Create Table DDL स्टेटमेंट को चलाने के तरीके पर विस्तृत ट्यूटोरियल है। आशा है कि आपने इसका आनंद लिया और कुछ नया सीखा।

कृपया मेरे YouTube चैनल को सब्सक्राइब करना सुनिश्चित करें क्योंकि अगले ट्यूटोरियल में हम डायनामिक SQL के बारे में कुछ नया और दिलचस्प सीखेंगे। आप मुझे मेरे ट्विटर और फेसबुक पर भी फॉलो कर सकते हैं।

धन्यवाद और आपका दिन मंगलमय हो!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या कोई समझा सकता है कि MERGE कथन वास्तव में Oracle में क्या करता है?

  2. बैश चर का उपयोग करते समय Sqlplus लॉगिन त्रुटि:SP2-0306:अमान्य विकल्प

  3. JDBC पतले ड्राइवर के लिए NLS_LANG सेटिंग?

  4. EM13c . में एजेंट डिमोशन

  5. पंक्तियों में विभाजित स्ट्रिंग Oracle SQL