तत्काल निष्पादित करके तालिका DDL बनाएं
Oracle डेटाबेस में नेटिव डायनेमिक SQL के तत्काल विवरण निष्पादित करने के लिए तालिका बनाएँ DDL क्वेरी लिखने के दो तरीके हैं। हम पिछले ट्यूटोरियल में उनमें से एक पर पहले ही चर्चा कर चुके हैं। पिछले ट्यूटोरियल में हमने जिस पहले तरीके पर चर्चा की थी, वह संभवतः डायनेमिक SQL के लिए SQL क्वेरी लिखने का सबसे आसान तरीका है। लेकिन यह हमें आगे सीखने से नहीं रोकता है। तो चलिए आगे बढ़ते हैं और दूसरा सीखते हैं।
इसलिए इस ट्यूटोरियल में हम एक्ज़िक्यूट इमीडिएट स्टेटमेंट का उपयोग करके डायनामिक एक्ज़ीक्यूशन के लिए CREATE TABLE DDL लिखने की दूसरी विधि सीखेंगे।
चूंकि यह ट्यूटोरियल पिछले ट्यूटोरियल की निरंतरता में है, इसलिए मैं आपसे अनुरोध करता हूं कि बेहतर समझ के लिए कृपया पहले उस ब्लॉग को देखें। कहा जा रहा है, चलिए ट्यूटोरियल शुरू करते हैं।
चरण1:क्रिएट टेबल डीडीएल तैयार करें।
अपनी SQL क्वेरी पहले से तैयार करें जिसे आप गतिशील रूप से निष्पादित करना चाहते हैं। यह कोड भ्रम को कम करेगा और वाक्यात्मक त्रुटि को भी कम करेगा।
CREATE TABLE tut_83 ( tut_num NUMBER(5), tut_name VARCHAR2 (50), CONSTRAINT cons1_col1_pid_pk PRIMARY KEY (tut_num) )
यहां हमारा क्रिएट टेबल डीडीएल है। बदले हुए नाम और एक अतिरिक्त प्राथमिक कुंजी बाधा को छोड़कर, यह डीडीएल काफी हद तक उसी के समान है जिसे हमने पिछले ट्यूटोरियल में बनाया था।
चरण 2:DDL विवरण के गतिशील निष्पादन के लिए PL/SQL ब्लॉक लिखें।
अब जब हमने अपना क्रिएट टेबल डीडीएल तैयार कर लिया है। आइए इसे गतिशील रूप से निष्पादित करने के लिए PL/SQL प्रोग्राम लिखें।
SET SERVEROUTPUT ON; DECLARE ddl_qry VARCHAR2(150); BEGIN ddl_qry := 'CREATE TABLE tut_83('|| 'tut_num NUMBER(3),'|| 'tut_name VARCHAR2(50)'|| ')'; EXECUTE IMMEDIATE ddl_qry; END; /
आइए देखें कि हमने इस कार्यक्रम में क्या किया।
घोषणा अनुभाग ।
DECLARE ddl_qry VARCHAR2 (150);
हमारे PL/SQL ब्लॉक के डिक्लेरेशन सेक्शन में हमने ddl_qry नाम से एक वेरिएबल घोषित किया है। यह वेरिएबल हमारे CREATE TABLE DDL को धारण करेगा जिसे हम Execute Immediate स्टेटमेंट का उपयोग करके चलाएंगे।
अंतिम ट्यूटोरियल के अनुसार तत्काल निष्पादित करें सभी SQL कथनों को VARCHAR2 डेटा प्रकार की एक स्ट्रिंग के रूप में मानता है। इसलिए हमने अपने वेरिएबल ddl_qry को VARCHAR2 डेटा टाइप के रूप में घोषित किया था।
निष्पादन अनुभाग।
डिक्लेरेशन सेक्शन के ठीक बाद हमारे पास एक्जीक्यूशन सेक्शन है जहाँ सारा मज़ा हो रहा है।
BEGIN ddl_qry := 'CREATE TABLE tut_83 ('|| 'tut_num NUMBER (5),'|| 'tut_name VARCHAR2 (50),'|| 'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'|| ')'; EXECUTE IMMEDIATE ddl_qry; END; /
इस निष्पादन खंड में केवल दो कथन हैं:
- असाइनमेंट विवरण
- तत्काल स्टेटमेंट निष्पादित करें
पहला स्टेटमेंट जो "असाइनमेंट स्टेटमेंट" है, इस कोड को पिछले वाले से अलग बनाता है। आइए देखें कि ये कथन क्या हैं।
विवरण 1:असाइनमेंट विवरण।
ddl_qry := 'CREATE TABLE tut_83 ('|| 'tut_num NUMBER (5),'|| 'tut_name VARCHAR2 (50),'|| 'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'|| ')';
यह एकमात्र कथन है जो इस PL/SQL प्रोग्राम को पिछले ट्यूटोरियल में देखे गए प्रोग्राम से अलग बना रहा है।
इस स्टेटमेंट में हम क्रिएट टेबल डीडीएल को वेरिएबल ddl_qry पर असाइन कर रहे हैं। तो यहाँ क्या अलग है?
पिछली विधि में हमने अपने पूरे डीडीएल स्टेटमेंट को सिंगल कोट्स ('') की एक जोड़ी में संलग्न किया था। इस तरह
ddl_qry:= 'CREATE TABLE tut_82 ( tut_num NUMBER(3), tut_name VARCHAR2 (50) )';
DDL क्वेरी लिखने का पहला तरीका
जबकि यहां दूसरी विधि में पूरी क्वेरी को सिंगल कोट्स में लपेटने के बजाय हमने पहले इसे VARCHAR2 के कई स्ट्रिंग्स में विभाजित किया। यह हमने क्वेरी की हर एक लाइन को सिंगल कोट्स में लपेटकर किया। इसके बाद हमने उन सभी को कॉन्टेनेट ऑपरेटर ( || ) का उपयोग करके शामिल किया ताकि पीएल/एसक्यूएल इंजन उन्हें एक इकाई के रूप में निष्पादित कर सके।
आप वीडियो ट्यूटोरियल में इस ब्रेक का विस्तृत प्रदर्शन देख सकते हैं और गतिशील निष्पादन के लिए दृष्टिकोण जीत सकते हैं।
सुझाई गई रीडिंग:कॉनकैट फंक्शन बनाम कॉनकैट ऑपरेटर।
विवरण 2:तत्काल विवरण निष्पादित करें।
हमारा दूसरा कथन तत्काल निष्पादित करें कथन है। यह किसी भी SQL कथन को निष्पादित करता है जो परिणाम की एकल पंक्ति को गतिशील रूप से लौटाता है। हमारे मामले में यह कथन PL/SQL ब्लॉक के माध्यम से CREATE TABLE DDL क्वेरी निष्पादित कर रहा है।
Oracle डेटाबेस में PL/SQL ब्लॉक के माध्यम से DDL स्टेटमेंट को निष्पादित करने के केवल दो तरीके हैं। या तो DBMS_SQL पैकेज का उपयोग करके या नेटिव डायनेमिक SQL के तत्काल निष्पादित करें। तत्काल निष्पादित करें का उपयोग करके आप और क्या कर सकते हैं, यह जानने के लिए यहां पढ़ें।
डीडीएल को गतिशील रूप से निष्पादित करने के लिए, आपको पहले आरक्षित वाक्यांश 'तत्काल निष्पादित' लिखना होगा। इसके बाद वेरिएबल नाम आता है जिसमें आपने अपना डीडीएल स्टोर किया है जैसा कि हमने ऊपर किया था।
जांचें कि तालिका बनाई गई है या नहीं।
यह जांचने के कई तरीके हैं कि पीएल/एसक्यूएल ब्लॉक ने क्रिएट टेबल डीडीएल को सफलतापूर्वक निष्पादित किया है या नहीं। लेकिन यहां मैं आपको दो सबसे आसान और लोकप्रिय तरीके दिखाने जा रहा हूं।
DESCRIBE कमांड का उपयोग करना
यह जांचने का सबसे आसान तरीका है कि PL/SQL ब्लॉक ने तालिका tut_83 को सफलतापूर्वक बनाया है या नहीं, यह DESCRIBE कमांड का उपयोग करके है। वर्णन कमांड उल्लिखित तालिका की संरचना को दिखाता है, केवल अगर यह मौजूद है अन्यथा यह एक त्रुटि देता है।
आइए कोशिश करते हैं कि
DESCRIBE tut_83; Or DESC tut_83
यदि उपरोक्त वर्णन आदेश के निष्पादन पर आप तालिका tut_83 की संरचना देखते हैं तो इसका मतलब है कि उपरोक्त पीएल/एसक्यूएल ब्लॉक ने सफलतापूर्वक तालिका बनाई है। लेकिन अगर आपको कोई त्रुटि मिलती है जिसका मतलब है कि आपने कहीं गड़बड़ कर दी है और पीएल/एसक्यूएल ब्लॉक का निष्पादन सफल नहीं है।
ALL_OBJECTS डेटा डिक्शनरी का उपयोग करना।
आप ALL_OBJECTS डेटा डिक्शनरी को भी क्वेरी कर सकते हैं। इससे यह पता लगाने में मदद मिलती है कि वांछित तालिका या कोई अन्य वस्तु जिसे आप बनाने की कोशिश कर रहे हैं, बनाई गई है या नहीं। इस तरह
SELECT 'We created a table with name '||object_name||' in ' ||owner||' schema on '||created FROM all_objects WHERE object_name ='TUT_83';
वांछित वस्तु सफलतापूर्वक बनाई गई है या नहीं, यह पता लगाने के कई तरीकों में से ये दो हैं।
इस ट्यूटोरियल को समाप्त करने से पहले एक और बात। कृपया इसे और साथ ही आने वाले ट्यूटोरियल की बेहतर समझ के लिए पिछला ब्लॉग पढ़ें।
यह Oracle डेटाबेस में नेटिव डायनेमिक SQL के तत्काल विवरण को निष्पादित करने के लिए CREATE TABLE DDL लिखने के दूसरे तरीके पर PL/SQL ट्यूटोरियल है।
आशा है आपको पढ़कर अच्छा लगा होगा। यूट्यूब चैनल को सब्सक्राइब जरूर करें। क्योंकि अगले ट्यूटोरियल में हम सीखेंगे कि कैसे स्कीमा ऑब्जेक्ट को गतिशील रूप से ड्रॉप और संशोधित किया जाए।
धन्यवाद और आपका दिन शुभ हो!