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

Oracle डेटाबेस में INTO क्लॉज के साथ तत्काल निष्पादन का उपयोग कैसे करें

इनटू क्लॉज के साथ तत्काल निष्पादित करें

नेटिव डायनेमिक SQL या NDS डेवलपर्स को लचीलापन प्रदान करके, प्रदर्शन में सुधार करके और प्रोग्रामिंग सिंटैक्स को सरल बनाकर मदद कर रहा है। आज इस ट्यूटोरियल में हम सीखेंगे कि एक्ज़िक्यूट इमीडिएट स्टेटमेंट का उपयोग करके Oracle डेटाबेस में एक डायनामिक SQL क्वेरी कैसे लिखें।

तो Oracle डेटाबेस में एक्ज़िक्यूट इमीडिएट स्टेटमेंट क्या है?

निष्पादन तत्काल का उपयोग करके हम ओरेकल डेटाबेस में गतिशील रूप से किसी भी SQL कथन या पीएल/एसक्यूएल ब्लॉक को पार्स और निष्पादित कर सकते हैं। और गतिशील रूप से मेरा मतलब रनटाइम पर है।

तत्काल निष्पादित करें केवल एक तर्क लेता है। यह या तो SQL स्टेटमेंट या PL/SQL ब्लॉक हो सकता है। कंपाइलर निष्पादन तत्काल कथन के तर्कों को VARCHAR2 डेटा प्रकारों की स्ट्रिंग के रूप में मानता है। इसलिए अपनी SQL क्वेरी या PL/SQL ब्लॉक को सिंगल कोट्स (' ' ) के जोड़े में संलग्न करना सुनिश्चित करें।

क्या हम तत्काल निष्पादन के साथ किसी SQL कथन का उपयोग कर सकते हैं?

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

एक्ज़िक्यूट इमीडिएट स्टेटमेंट का सिंटैक्स क्या है?

निष्पादन तत्काल कथन का सिंटेक्स बहुत आसान है। आइए इसे देखें।

EXECUTE IMMEDIATE dynamic_query
[INTO user_defined_variable-1, user_defined_variable-2…]
[USING bind_argument-1, bind_argument-2…]
[RETURNING|RETURN-INTO clause];  

कहां:

तत्काल निष्पादित करें :तत्काल निष्पादित करें एक आरक्षित वाक्यांश है।

Dynamic_query :आरक्षित वाक्यांश के बाद हमें अपनी गतिशील क्वेरी लिखनी है। यह क्वेरी SQL कथन या PL/SQL ब्लॉक हो सकती है। इसके अलावा संकलक गतिशील क्वेरी को VARCHAR2 डेटा प्रकार की एक स्ट्रिंग के रूप में मानता है। इसलिए आपको यह सुनिश्चित करना होगा कि आप अपनी क्वेरी को सिंगल कोट्स की एक जोड़ी में संलग्न करें।

इनटू क्लॉज :INTO क्लॉज का उपयोग करके हम उपयोगकर्ता परिभाषित चर की सूची निर्दिष्ट करते हैं। इसके अलावा ये डायनामिक सेलेक्ट स्टेटमेंट द्वारा लौटाए गए मान रखेंगे। यह SELECT-INTO स्टेटमेंट से काफी मिलता-जुलता है। साथ ही यह एक वैकल्पिक उपवाक्य है, इसलिए यदि आपको इसकी आवश्यकता नहीं है तो आप इसे छोड़ सकते हैं।

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

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

आप ऊपर दिए गए सिंटैक्स की विस्तृत व्याख्या यहां संबंधित वीडियो में भी देख सकते हैं।

तत्काल कथन निष्पादित करने का उदाहरण।

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

इस प्रकार अवधारणा को सरल और सीखने में आसान रखने के लिए हम पहले खंड जो INTO का उपयोग करके तत्काल निष्पादित करें का उदाहरण करेंगे।

INTO क्लॉज के साथ तत्काल निष्पादित करें।

SET SERVEROUTPUT ON;
DECLARE
    sql_qry     VARCHAR2 (150);
    emp_tot     NUMBER(3);
BEGIN
    
    sql_qry:= ‘SELECT count (*) FROM employees';
    EXECUTE IMMEDIATE sql_qry INTO emp_tot;
    DBMS_OUTPUT.PUT_LINE ('Total employees are: '||emp_tot);

END;
/

INTO . के साथ तत्काल निष्पादन का उपयोग करने का तरीका प्रदर्शित करने वाला एक बहुत ही सरल उदाहरण यहां दिया गया है Oracle डेटाबेस में क्लॉज। आइए देखें कि हमने यहां क्या किया।

घोषणा अनुभाग

डिक्लेरेशन सेक्शन में हमने दो वेरिएबल घोषित किए हैं। पहला चर VARCHAR 2 प्रकार का sql_qry है। हम इस वेरिएबल का उपयोग सेलेक्ट स्टेटमेंट को स्टोर करने के लिए करेंगे जिसे हम अपने EXECUTE IMMEDIATE स्टेटमेंट के साथ निष्पादित करना चाहते हैं। चूंकि यह वेरिएबल DML स्टेटमेंट रखने वाला है, इसलिए हमें यह सुनिश्चित करना होगा कि इसमें पर्याप्त डेटा चौड़ाई हो।

दूसरा उपयोगकर्ता परिभाषित चर emp_tot है। हम अपने सेलेक्ट स्टेटमेंट द्वारा लौटाए गए डेटा को होल्ड करने के लिए INTO क्लॉज के साथ इस वेरिएबल का उपयोग करेंगे।

निष्पादन अनुभाग

इस खंड में हमारे पास केवल तीन कथन हैं। ये हैं:

विवरण 1 :

पहले स्टेटमेंट में हम वेरिएबल sql_qry को एक मान्य SQL क्वेरी असाइन कर रहे हैं।

विवरण 2 :

दूसरा कथन तत्काल निष्पादन - कथन में है। इस स्टेटमेंट में रिजर्व्ड फ्रेज लिखने के तुरंत बाद हम वेरिएबल sql_qry का नाम लिखते हैं। वही वेरिएबल जिसमें हम सेलेक्ट स्टेटमेंट को स्टोर करते हैं।

निष्पादन पर रनटाइम इंजन इस वेरिएबल को उस सामग्री से बदल देगा जो उसके पास है, जो हमारे मामले में एक सेलेक्ट स्टेटमेंट है। यदि कोई त्रुटि नहीं है, तो रनटाइम इंजन अंतर्निहित SELECT स्टेटमेंट को निष्पादित करेगा। इसके बाद यदि कोई परिणाम हो तो उसका परिणाम लौटा दें।

इस बीच हमारा सेलेक्ट स्टेटमेंट एक मान लौटाएगा जो कर्मचारियों की तालिका की कुल पंक्तियों की संख्या है। EXECUTE IMMEDIATE स्टेटमेंट के INTO क्लॉज का उपयोग करके हम उस रिटर्निंग वैल्यू को वेरिएबल emp_tot में स्टोर करेंगे।

विवरण 3 :

तीसरा स्टेटमेंट एक आउटपुट स्टेटमेंट है जिसके इस्तेमाल से हम emp_tot वेरिएबल की वैल्यू वापस यूजर को दिखा रहे हैं।

जानकारी: <मजबूत>
डीएमएल लेनदेन के मामले में एक स्पष्ट प्रतिबद्धता की आवश्यकता है क्योंकि तत्काल निष्पादित करें स्वचालित रूप से डीएमएल लेनदेन नहीं करेगा।

इस निष्पादन अनुभाग को लिखने का एक वैकल्पिक तरीका है:

BEGIN
    EXECUTE IMMEDIATE 'SELECT count (*) FROM employees' INTO emp_tot;
    DBMS_OUTPUT.PUT_LINE ('Total employees are: '||emp_tot); 
END;
/

आप चाहें तो पहले स्टेटमेंट को पूरी तरह से स्किप कर सकते हैं। आरक्षित वाक्यांश EXECUTE IMMEDIATE के ठीक बाद सीधे SQL क्वेरी लिखें।

एक्ज़िक्यूट इमीडिएट के लिए क्वेरी लिखने का सही तरीका क्या है, यह जानने के लिए कृपया मेरे YouTube चैनल पर वीडियो देखें।

आप लोग क्या सोचते हैं?

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

आप लोग क्या सोचते हैं? एक्ज़िक्यूट इमीडिएट लिखने का कौन सा तरीका आपको सबसे अच्छा लगता है? पहले वाला या बाद वाला। मुझे अपने विचार मेरे फेसबुक पेज या मेरे ट्विटर पर बताएं।

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

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

अधिक दिलचस्प ट्यूटोरियल के लिए मेरे YouTube चैनल को सब्सक्राइब करना सुनिश्चित करें।

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


  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. oci_connect कनेक्शन विफल

  3. ऑरैकल में पहले से बनाई गई तालिका में ऑटोइनक्रिकमेंट

  4. मैं पाइथन का उपयोग करके ओरेकल डेटाबेस में बैच सम्मिलित कैसे कर सकता हूं?

  5. एकाधिक csv फ़ाइलों में तालिका निर्यात करने की प्रक्रिया