MariaDB सर्वर 10.3 में वापस, हमने Oracle PL/SQL के सबसेट के साथ संगतता प्रदान करने के लिए एक नया SQL मोड (SQL_MODE=ORACLE) जोड़ा, जो संरचित क्वेरी भाषा (SQL) के लिए एक प्रक्रियात्मक विस्तार है। मारियाडीबी कम्युनिटी सर्वर 10.6 की हालिया रिलीज के साथ, हमने ROWNUM()
जैसे कई कार्यों को जोड़कर मारियाडीबी की पीएल/एसक्यूएल संगतता का विस्तार करने के लिए अपनी यात्रा जारी रखी है। , ADD_MONTHS()
और TO_CHAR()
. यह कई कारणों से बहुत अच्छा है लेकिन शुरू करने के लिए, मारियाडीबी ओपन सोर्स ओरेकल संगतता को लागू करने वाला एकमात्र डेटाबेस है, इसलिए यह कार्यक्षमता सभी के लिए उपलब्ध है। इसका सही अर्थ समझने के लिए, हमारे लिए एक संक्षिप्त कदम पीछे हटना महत्वपूर्ण है ताकि आप जान सकें कि क्यों शुरू करने के लिए हमने इस रास्ते को शुरू किया है।
प्रक्रियात्मक और घोषणात्मक प्रोग्रामिंग की शक्ति
SQL भाषा की डेटा हेरफेर शक्ति को प्रक्रियात्मक क्षमताओं के साथ जोड़कर, डेवलपर्स के पास रोमांचक, नए अवसरों की अधिकता है। पीएल/एसक्यूएल का उपयोग करते हुए, डेवलपर्स के पास एसक्यूएल स्टेटमेंट्स को निष्पादित करने की क्षमता होती है जो "क्या करना है" के घोषणात्मक दृष्टिकोण पर ध्यान केंद्रित करते हैं, जबकि संचालन के प्रवाह को नियंत्रित करने की क्षमता प्रदान करते हैं, या "इसे कैसे करें"।
किसकी प्रतीक्षा? ठीक है, निम्न पर विचार करें पारंपरिक SQL कथन।
SELECT id, name, has_kids FROM friends;
सरल, सुरुचिपूर्ण और प्रभावी। SQL एक सुंदर भाषा है, लेकिन इसकी सीमाएँ हैं। उदाहरण के लिए, क्या होगा यदि आप SELECT
. से लौटाए गए परिणामों के माध्यम से लूप करना चाहते हैं? बयान निष्पादन? और फिर, परिणामों के माध्यम से पार्स करते समय, एक सशर्त विवरण का उपयोग करके प्रत्येक परिणाम की जांच करें (उदाहरण के लिए यदि has_kids
सच है) ताकि आप उन शर्तों के आधार पर विशिष्ट संचालन कर सकें?
त्वरित नोट :यह विशुद्ध रूप से काल्पनिक है। मुझे यकीन है कि अगर आपके बच्चों के साथ दोस्त हैं और बिना बच्चों वाले दोस्त हैं तो आप उन सभी के साथ एक जैसा व्यवहार करते हैं। लेकिन, इस उदाहरण के लिए, मान लें कि आप ऐसा नहीं करते हैं। ठीक है? ठीक है, बढ़िया।
लेकिन उन सभी पुनरावृत्तियों और शर्तों के होने से यह संभव है कि आप एक त्रुटि में भाग लेंगे। क्या यह अच्छा नहीं होगा यदि आप सीधे डेटाबेस की ओर से त्रुटियों (अर्थात अपवादों) को संभाल सकें, बिना मूल परिणामों को पहले संसाधित किए जाने वाले एप्लिकेशन कोड पर वापस लौटाए? ठीक है, यह बहुत बुरा है, क्योंकि आप सादे ol' SQL का उपयोग कर रहे हैं, और इनमें से कोई भी चीज़ संभव नहीं है।
डर नहीं! इसके बजाय, मेरे साथ PL/SQL की अद्भुत दुनिया में आएं!
पीएल/एसक्यूएल ब्लॉक के रूप में जानी जाने वाली किसी चीज़ के उपयोग के माध्यम से, आप उस SQL को जोड़ सकते हैं जिसे आप जानते हैं और प्रक्रियात्मक क्षमताओं के साथ प्यार करते हैं जो आपको चर घोषित करने की क्षमता, स्थितियों को संभालने, लूप जैसी सुविधाओं का उपयोग करके संचालन के प्रवाह को नियंत्रित करने की अनुमति देगा। डेटा के माध्यम से, अपवादों को प्रबंधित करें, और भी बहुत कुछ।
पीएल/एसक्यूएल ब्लॉकों को मारियाडीबी सर्वर के भीतर नियंत्रित किया जाता है, जहां एसक्यूएल और प्रक्रियात्मक बयानों को पार्स किया जाता है और तदनुसार निष्पादित किया जाता है।
बहुत बढ़िया, है ना? यह इतना बेहतर हो जाता है! लेकिन हमारे पिछले उदाहरण पर वापस। मेरे द्वारा पहले बताए गए सभी कार्यों को पूरा करने के लिए आप एक एकल PL/SQL ब्लॉक का उपयोग कर सकते हैं।
उदाहरण के लिए:
DELCARE CURSOR c IS SELECT id, name, has_kids FROM friends; BEGIN FOR friend_row IN c LOOP IF friend_row.has_kids == true THEN /* Do something */ ELSE /* Do something else */ END IF; END LOOP; EXCEPTION WHEN no_data_found THEN /* Handle no data found */ WHEN others THEN /* Handle all other kinds of exceptions */ END;
अधिक जानें
शक्तिशाली सामान, है ना? खैर, यह ब्लॉग पोस्ट वास्तव में सिर्फ हिमशैल का सिरा है। अगर आप चाहें तो अपनी भूख को बढ़ाने के लिए एक छोटी सी चीज। लेकिन अगर आप और जानना चाहते हैं, तो मैं हाल ही में प्रस्तुत एक वेबिनार देखने की अत्यधिक अनुशंसा करता हूं, मारियाडीबी और पीएल/एसक्यूएल:एसक्यूएल और प्रक्रियात्मक वक्तव्यों की शक्ति का संयोजन। इसमें, हम और अधिक विस्तार से बताते हैं कि हमने पीएल/एसक्यूएल समर्थन को जोड़ने और विस्तारित करने के लिए इसे अपना मिशन क्यों बनाया है और हम विभिन्न उदाहरण, और एक लाइव कोडिंग प्रदर्शन शामिल करते हैं, जो आपको पहली बार यह देखने देता है कि कैसे आप मारियाडीबी के भीतर पीएल/एसक्यूएल का उपयोग कर सकते हैं! हैप्पी कोडिंग, दोस्तों!