संग्रहीत प्रक्रिया: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Subroutine available to applications that access relational database management systems}}
{{Short description|Subroutine available to applications that access relational database management systems}}
एक संग्रहीत कार्यविधि (जिसे प्रोक, स्टॉर्प, स्पोक, स्टोप्रो, स्टोरप्रोक, स्टोरप्रोक, एसपी, या एसपी भी कहा जाता है) एक [[सबरूटीन]] है जो उन अनुप्रयोगों के लिए उपलब्ध है जो एक [[संबंधपरक डेटाबेस प्रबंधन प्रणाली]] (आरडीबीएमएस) तक पहुंचते हैं। ऐसी प्रक्रियाओं को डेटाबेस [[डेटा शब्दकोश]] में संग्रहीत किया जाता है।
एक संग्रहीत कार्यविधि (जिसे प्रोक, स्टॉर्प, स्पोक, स्टोप्रो, स्टोरप्रोक, स्टोर्डप्रोक, एसपी, या एसपी भी कहा जाता है) [[सबरूटीन]] है जो उन अनुप्रयोगों के लिए उपलब्ध है जो[[संबंधपरक डेटाबेस प्रबंधन प्रणाली]] (आरडीबीएमएस) तक पहुंचते हैं। ऐसी प्रक्रियाओं को डेटाबेस [[डेटा शब्दकोश]] में संग्रहीत किया जाता है।


संग्रहीत कार्यविधियों के उपयोग में डेटा सत्यापन | डेटा-सत्यापन (डेटाबेस में एकीकृत) या [[अभिगम नियंत्रण]] | एक्सेस-कंट्रोल तंत्र सम्मिलित  हैं। इसके अतिरिक्त, संग्रहीत कार्यविधियाँ तर्क को समेकित और केंद्रीकृत कर सकती हैं जो मूल रूप से अनुप्रयोगों में प्रयुक्त किया गया था। समय और स्मृति को बचाने के लिए, व्यापक या जटिल प्रसंस्करण जिसके लिए कई [[SQL]] कथनों के निष्पादन की आवश्यकता होती है, को संग्रहीत कार्यविधियों में सहेजा जा सकता है, और सभी अनुप्रयोग प्रक्रियाओं को कॉल करते हैं। एक संग्रहीत कार्यविधि को दूसरे के अंदर निष्पादित करके नेस्टेड संग्रहीत कार्यविधियों का उपयोग किया जा सकता है।
संग्रहीत कार्य विधियों के उपयोग में डेटा-सत्यापन (डेटाबेस में एकीकृत) या [[अभिगम नियंत्रण]] सम्मिलित है | इसके अतिरिक्त, संग्रहीत कार्य विधियाँ तर्क को मजबूत और केंद्रीकृत कर सकती हैं जो मूल रूप से अनुप्रयोगों में प्रयुक्त किया गया था। समय और स्मृति को बचाने के लिए, व्यापक या जटिल प्रसंस्करण जिसके लिए कई [[SQL|एसक्यूएल]] कथनों के निष्पादन की आवश्यकता होती है, को संग्रहीत कार्य विधियों में सहेजा जा सकता है, और सभी अनुप्रयोग प्रक्रियाओं को पुकारते हैं।संग्रहीत कार्यविधि को दूसरे के अंदर निष्पादित करके नेस्टेड संग्रहीत कार्यविधियों का उपयोग किया जा सकता है।


संग्रहीत कार्यविधियाँ [[परिणाम सेट]] लौटा सकती हैं, अर्थात, a के परिणाम <code>SELECT</code> कथन। इस तरह के परिणाम सेट को [[कर्सर (डेटाबेस)]] का उपयोग करके, अन्य संग्रहीत प्रक्रियाओं द्वारा, परिणाम-सेट लोकेटर को जोड़कर या अनुप्रयोगों द्वारा संसाधित किया जा सकता है। संग्रहीत कार्यविधियों में डेटा और कर्सर को संसाधित करने के लिए घोषित चर भी हो सकते हैं जो इसे तालिका में कई पंक्तियों के माध्यम से लूप करने की अनुमति देते हैं। संग्रहीत-प्रक्रिया प्रवाह-नियंत्रण कथनों में सामान्यतः सम्मिलित  होते हैं <code>IF</code>, <code>WHILE</code>, <code>LOOP</code>, <code>REPEAT</code>, और <code>CASE</code> बयान, और बहुत कुछ। संग्रहीत कार्यविधियाँ चर प्राप्त कर सकती हैं, परिणाम वापस कर सकती हैं या चर को संशोधित कर सकती हैं और उन्हें वापस कर सकती हैं, यह इस बात पर निर्भर करता है कि चर कैसे और कहाँ घोषित किया गया है।
संग्रहीत कार्यविधियाँ [[परिणाम सेट|परिणाम संग्रह]] को लौटा सकती हैं, अर्थात, a के परिणाम चयन कथन। इस तरह के परिणाम संग्रह को [[कर्सर (डेटाबेस)]] का उपयोग करके, अन्य संग्रहीत प्रक्रियाओं द्वारा, परिणाम-संग्रह लोकेटर को जोड़कर या अनुप्रयोगों द्वारा संसाधित किया जा सकता है। संग्रहीत कार्य विधियों में डेटा और कर्सर को संसाधित करने के लिए घोषित चर भी हो सकते हैं जो इसे तालिका में कई पंक्तियों के माध्यम से लूप करने की अनुमति देते हैं। संग्रहीत-प्रक्रिया प्रवाह-नियंत्रण कथनों में सामान्यतः सम्मिलित  होते हैं <code>IF</code>, <code>WHILE</code>, <code>LOOP</code>, <code>REPEAT</code>, और <code>CASE</code> बयान, और बहुत कुछ। संग्रहीत कार्य विधियाँ चर प्राप्त कर सकती हैं, परिणाम वापस कर सकती हैं या चर को संशोधित कर सकती हैं और उन्हें वापस कर सकती हैं, यह इस बात पर निर्भर करता है कि चर कैसे और कहाँ घोषित किया गया है।


== कार्यान्वयन ==
== कार्यान्वयन ==
संग्रहीत कार्यविधियाँ उपयोगकर्ता-परिभाषित कार्यों (UDFs) के समान हैं। प्रमुख अंतर यह है कि यूडीएफ को एसक्यूएल बयानों के अंदर किसी भी अन्य अभिव्यक्ति की तरह उपयोग किया जा सकता है, जबकि संग्रहित प्रक्रियाओं को उपयोग करके प्रयुक्त किया जाना चाहिए <code>CALL</code> कथन।<ref>{{Cite web |title=Db2 12 - Application programming and SQL - Calling a stored procedure from your application |url=https://www.ibm.com/docs/en/db2-for-zos/12?topic=zos-calling-stored-procedure-from-your-application |access-date=2022-05-26 |website=www.ibm.com |language=en-us}}</ref>
संग्रहीत कार्यविधियाँ उपयोगकर्ता-परिभाषित कार्यों (यूडीएफs) के समान हैं। प्रमुख अंतर यह है कि यूडीएफ को एसक्यूएल बयानों के अंदर किसी भी अन्य अभिव्यक्ति की तरह उपयोग किया जा सकता है, जबकि संग्रहित प्रक्रियाओं को उपयोग करके प्रयुक्त किया जाना चाहिए <code>CALL</code> कथन।<ref>{{Cite web |title=Db2 12 - Application programming and SQL - Calling a stored procedure from your application |url=https://www.ibm.com/docs/en/db2-for-zos/12?topic=zos-calling-stored-procedure-from-your-application |access-date=2022-05-26 |website=www.ibm.com |language=en-us}}</ref>
 
कॉल प्रक्रिया (...)
कॉल प्रक्रिया (...)
या
या
  निष्पादन प्रक्रिया (...)
  निष्पादन प्रक्रिया (...)


संग्रहीत कार्यविधियों का स्पष्ट और सही कार्यान्वयन एक डेटाबेस प्रणाली से दूसरे में भिन्न होता है। अधिकांश प्रमुख डेटाबेस विक्रेता किसी न किसी रूप में उनका समर्थन करते हैं। डेटाबेस प्रणाली के आधार पर, संग्रहीत कार्यविधियाँ विभिन्न प्रकार की [[प्रोग्रामिंग भाषा]]ओं में प्रयुक्त की जा सकती हैं, उदाहरण के लिए SQL, Java (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा), या [[C++]]। गैर-SQL भाषाओं में लिखी गई संग्रहीत कार्यविधियाँ स्वयं SQL कथनों को निष्पादित कर सकती हैं या नहीं भी कर सकती हैं।
संग्रहीत कार्य विधियों का स्पष्ट और सही कार्यान्वयनडेटाबेस प्रणाली से दूसरे में भिन्न होता है। अधिकांश प्रमुख डेटाबेस विक्रेता किसी न किसी रूप में उनका समर्थन करते हैं। डेटाबेस प्रणाली के आधार पर, संग्रहीत कार्य विधियाँ विभिन्न प्रकार की [[प्रोग्रामिंग भाषा]]ओं में प्रयुक्त की जा सकती हैं, उदाहरण के लिए एसक्यूएल, जावा (प्रोग्रामिंग भाषा), सी (प्रोग्रामिंग भाषा), या [[C++|सी++]]। गैर-एसक्यूएल भाषाओं में लिखी गई संग्रहीत कार्यविधियाँ स्वयं एसक्यूएल कथनों को निष्पादित कर सकती हैं या नहीं भी कर सकती हैं।


संग्रहीत कार्यविधियों के बढ़ते अपनाने के कारण SQL:1999 में SQL भाषा में प्रक्रियात्मक तत्वों की प्रारंभिक हुई और SQL/PSM भाग में SQL:2003 मानक। इसने SQL को एक [[अनिवार्य प्रोग्रामिंग भाषा]] बना दिया। अधिकांश डेटाबेस प्रणाली SQL/PSM से अधिक मालिकाना और विक्रेता-विशिष्ट एक्सटेंशन प्रदान करते हैं। जावा संग्रहीत कार्यविधियों के लिए एक मानक विनिर्देश SQL/JRT के साथ-साथ उपस्थित है।
संग्रहीत कार्यविधियों के बढ़ते अपनाने के कारण एसक्यूएल:1999 में एसक्यूएल भाषा में प्रक्रियात्मक तत्वों की प्रारंभिक हुई और एसक्यूएल/पीएसएम भाग में एसक्यूएल:2003 मानक। इसने एसक्यूएल को[[अनिवार्य प्रोग्रामिंग भाषा]] बना दिया। अधिकांश डेटाबेस प्रणाली एसक्यूएल/पीएसएम से अधिक मालिकाना और विक्रेता-विशिष्ट एक्सटेंशन प्रदान करते हैं। जावा संग्रहीत कार्यविधियों के लिएमानक विनिर्देश एसक्यूएल/जेआरटी के साथ-साथ उपस्थित है।


{| class="wikitable sortable"
{| class="wikitable sortable"
Line 25: Line 27:
|-
|-
| [[IBM Db2]]
| [[IBM Db2]]
| [[SQL PL]] (close to the [[SQL/PSM]] standard) or [[Java (programming language)|Java]]
| [[SQL PL|एसक्यूएल PL]] (close to the [[SQL/PSM|एसक्यूएल/PSM]] standard) or [[Java (programming language)|Java]]
|-
|-
| [[Firebird (database server)|Firebird]]
| [[Firebird (database server)|Firebird]]
| PSQL (Fyracle also supports portions of Oracle's PL/SQL)
| Pएसक्यूएल (Fyracle also supports portions of Oracle's PL/एसक्यूएल)
|-
|-
| [[Informix]]
| [[Informix]]
Line 36: Line 38:
| Stored Procedure and Trigger Language
| Stored Procedure and Trigger Language
|-
|-
| [[Microsoft SQL Server]]
| [[Microsoft SQL Server|Microsoft एसक्यूएल Server]]
| [[Transact-SQL]] and various [[.NET Framework]] languages
| [[Transact-SQL|Transact-एसक्यूएल]] and various [[.NET Framework]] languages
|-
|-
| [[MySQL]], [[MariaDB]]
| [[MySQL|Myएसक्यूएल]], [[MariaDB]]
| own stored procedures, closely adhering to [[SQL/PSM]] standard
| own stored procedures, closely adhering to [[SQL/PSM|एसक्यूएल/PSM]] standard
|-
|-
| [[NuoDB]]
| [[NuoDB]]
| [[SQL]] or [[Java (programming language)|Java]]
| [[SQL|एसक्यूएल]] or [[Java (programming language)|Java]]
|-
|-
| [[Virtuoso Universal Server|OpenLink Virtuoso]]
| [[Virtuoso Universal Server|OpenLink Virtuoso]]
| Virtuoso SQL Procedures (VSP);<ref name="SQL Procedure Language Guide">{{cite web|url=http://docs.openlinksw.com/virtuoso/ch-sqlprocedures/|title=Chapter 11. SQL Procedure Language Guide|website=OpenLink documentation|access-date=11 September 2019}}</ref> also extensible via Java, C, and other programming languages
| Virtuoso एसक्यूएल Procedures (VSP);<ref name="SQL Procedure Language Guide">{{cite web|url=http://docs.openlinksw.com/virtuoso/ch-sqlprocedures/|title=Chapter 11. SQL Procedure Language Guide|website=OpenLink documentation|access-date=11 September 2019}}</ref> also extensible via Java, C, and other programming languages
|-
|-
| [[Oracle database|Oracle]]
| [[Oracle database|Oracle]]
| [[PL/SQL]] or [[Java (programming language)|Java]]
| [[PL/SQL|PL/एसक्यूएल]] or [[Java (programming language)|Java]]
|-
|-
| [[PostgreSQL]]
| [[PostgreSQL|Postgreएसक्यूएल]]
| [[PL/pgSQL]], can also use own function languages such as PL/Perl or PL/PHP
| [[PL/pgSQL|PL/pgएसक्यूएल]], can also use own function languages such as PL/Perl or PL/PHP
|-
|-
| [[SAP HANA]]
| [[SAP HANA]]
| [https://help.sap.com/viewer/de2486ee947e43e684d39702027f8a94/2.0.03/en-US/297af2926307446cbbfb1a8f96fec941.html SQLScript] or [[R (programming language)|R]]
| [https://help.sap.com/viewer/de2486ee947e43e684d39702027f8a94/2.0.03/en-US/297af2926307446cbbfb1a8f96fec941.html एसक्यूएलScript] or [[R (programming language)|R]]
|-
|-
| [[SAP Adaptive Server Enterprise|SAP ASE]]
| [[SAP Adaptive Server Enterprise|SAP ASE]]
| [[Transact-SQL]]
| [[Transact-SQL|Transact-एसक्यूएल]]
|-
|-
| [[SAP SQL Anywhere]]
| [[SAP SQL Anywhere|SAP एसक्यूएल Anywhere]]
| [[Transact-SQL]], Watcom SQL
| [[Transact-SQL|Transact-एसक्यूएल]], Watcom एसक्यूएल
|-
|-
| [[SQLite]]
| [[SQLite|एसक्यूएलite]]
| Not supported
| Not supported
|}
|}




== स्थिर SQL == के साथ तुलना
;ओवरहेड: क्योंकि संग्रहीत कार्यविधि विवरण सीधे डेटाबेस में संग्रहीत किए जाते हैं, वे संकलन ओवरहेड के सभी या कुछ हिस्सों को हटा सकते हैं जो सामान्यतः उन स्थितियों में आवश्यक होते हैं जहां सॉफ़्टवेयर अनुप्रयोग डेटाबेस में इनलाइन (गतिशील) SQL क्वेरी भेजते हैं। (चूंकि, अधिकांश डेटाबेस प्रणाली डायनेमिक SQL स्टेटमेंट को दोहराए जाने से बचने के लिए स्टेटमेंट कैश और अन्य विधि को प्रयुक्त करते हैं।) इसके अतिरिक्त, जब वे कुछ पूर्व-संकलित SQL से बचते हैं, तो स्टेटमेंट एक इष्टतम निष्पादन योजना बनाने की जटिलता को जोड़ते हैं क्योंकि SQL के सभी तर्क नहीं होते हैं। कथन संकलन समय पर प्रदान किए जाते हैं। विशिष्ट डेटाबेस कार्यान्वयन और कॉन्फ़िगरेशन के आधार पर, संग्रहित प्रक्रियाओं बनाम सामान्य प्रश्नों या उपयोगकर्ता परिभाषित कार्यों से मिश्रित प्रदर्शन परिणाम देखे जा सकते हैं।


;नेटवर्क ट्रैफ़िक से बचना: संग्रहीत कार्यविधियों का एक प्रमुख लाभ यह है कि वे सीधे [[डेटाबेस इंजन]] के अंदर चल सकती हैं। एक उत्पादन प्रणाली में, इसका सामान्यतः कारण है कि प्रक्रियाएं पूरी तरह से एक विशेष डेटाबेस सर्वर पर चलती हैं, जिसके पास एक्सेस किए जा रहे डेटा तक सीधी पहुंच होती है। यहाँ लाभ यह है कि नेटवर्क संचार निवेश को पूरी तरह से टाला जा सकता है। SQL कथनों की जटिल श्रृंखला के लिए यह अधिक महत्वपूर्ण हो जाता है।


व्यापार तर्क को समाहित करना: संग्रहीत कार्यविधियाँ प्रोग्रामर को डेटाबेस में एपीआई के रूप में व्यावसायिक तर्क को एम्बेड करने की अनुमति देती हैं, जो डेटा प्रबंधन को सरल बना सकती हैं और ग्राहक कार्यक्रमों में कहीं और तर्क को एन्कोड करने की आवश्यकता को कम कर सकती हैं। इसके परिणामस्वरूप दोषपूर्ण क्लाइंट प्रोग्राम द्वारा डेटा भ्रष्टाचार की संभावना कम हो सकती है। डेटाबेस प्रणाली संग्रहित प्रक्रियाओं की सहायता से डेटा अखंडता और डेटा स्थिरता सुनिश्चित कर सकता है।
 
== स्थिर एसक्यूएल == के साथ तुलना
;ओवरहेड: क्योंकि संग्रहीत कार्यविधि विवरण सीधे डेटाबेस में संग्रहीत किए जाते हैं, वे संकलन ओवरहेड के सभी या कुछ हिस्सों को हटा सकते हैं जो सामान्यतः उन स्थितियों में आवश्यक होते हैं जहां सॉफ़्टवेयर अनुप्रयोग डेटाबेस में इनलाइन (गतिशील) एसक्यूएल प्रश्न भेजते हैं। (चूंकि, अधिकांश डेटाबेस प्रणाली गतिशील एसक्यूएल कथन को दोहराए जाने से बचने के लिए कथन कैश और अन्य विधि को प्रयुक्त करते हैं।) इसके अतिरिक्त, जब वे कुछ पूर्व-संकलित एसक्यूएल से बचते हैं, तो कथन इष्टतम निष्पादन योजना बनाने की जटिलता को जोड़ते हैं क्योंकि एसक्यूएल के सभी तर्क नहीं होते हैं। कथन संकलन समय पर प्रदान किए जाते हैं। विशिष्ट डेटाबेस कार्यान्वयन और विन्यास के आधार पर, संग्रहित प्रक्रियाओं बनाम सामान्य प्रश्नों या उपयोगकर्ता परिभाषित कार्यों से मिश्रित प्रदर्शन परिणाम देखे जा सकते हैं।
 
;प्रसार यातायात से बचना: संग्रहीत कार्यविधियों का प्रमुख लाभ यह है कि वे सीधे [[डेटाबेस इंजन]] के अंदर चल सकती हैं।उत्पादन प्रणाली में, इसका सामान्यतः कारण है कि प्रक्रियाएं पूरी तरह से विशेष डेटाबेस सर्वर पर चलती हैं, जिसके पास एक्सेस किए जा रहे डेटा तक सीधी पहुंच होती है। यहाँ लाभ यह है कि नेटवर्क संचार निवेश को पूरी तरह से टाला जा सकता है। एसक्यूएल कथनों की जटिल श्रृंखला के लिए यह अधिक महत्वपूर्ण हो जाता है।
 
'''व्यापार तर्क को समाहित करना'''
 
संग्रहीत कार्यविधियाँ प्रोग्रामर को डेटाबेस में एपीआई के रूप में व्यावसायिक तर्क को एम्बेड करने की अनुमति देती हैं, जो डेटा प्रबंधन को सरल बना सकता  हैं और ग्राहक कार्यक्रमों में कहीं और तर्क को एन्कोड करने की आवश्यकता को कम कर सकती हैं। इसके परिणाम स्वरूप दोषपूर्ण क्लाइंट प्रोग्राम द्वारा डेटा भ्रष्टाचार की संभावना कम हो सकती है। डेटाबेस प्रणाली संग्रहित प्रक्रियाओं की सहायता से डेटा अखंडता और डेटा स्थिरता सुनिश्चित कर सकता है।


;पहुँच-अधिकारों का प्रत्यायोजन: कई प्रणालियों में, संग्रहीत कार्यविधियों को डेटाबेस तक पहुँच अधिकार प्रदान किए जा सकते हैं जो उन प्रक्रियाओं को निष्पादित करने वाले उपयोगकर्ताओं के पास सीधे नहीं होते हैं।
;पहुँच-अधिकारों का प्रत्यायोजन: कई प्रणालियों में, संग्रहीत कार्यविधियों को डेटाबेस तक पहुँच अधिकार प्रदान किए जा सकते हैं जो उन प्रक्रियाओं को निष्पादित करने वाले उपयोगकर्ताओं के पास सीधे नहीं होते हैं।


SQL इंजेक्शन हमलों से कुछ सुरक्षा: इंजेक्शन हमलों से बचाने के लिए संग्रहीत कार्यविधियों का उपयोग किया जा सकता है। संग्रहीत कार्यविधि पैरामीटर को डेटा के रूप में माना जाएगा, तथापि  कोई हमलावर SQL कमांड सम्मिलित करता हो। साथ ही, कुछ DBMS पैरामीटर के प्रकार की जाँच करेंगे। चूँकि, एक संग्रहीत कार्यविधि जो बदले में इनपुट का उपयोग करके गतिशील SQL उत्पन्न करती है, जब तक कि उचित सावधानी नहीं बरती जाती है, तब तक SQL इंजेक्शन के लिए असुरक्षित है।
'''एसक्यूएल इंजेक्शन हमलों से कुछ सुरक्षा'''
 
इंजेक्शन हमलों से बचाने के लिए संग्रहीत कार्यविधियों का उपयोग किया जा सकता है। संग्रहीत कार्यविधि पैरामीटर को डेटा के रूप में माना जाएगा, तथापि  कोई हमलावर एसक्यूएल आदेश सम्मिलित करता है। साथ ही, कुछ डीबीएमएस पैरामीटर के प्रकार की जाँच करेंगे। चूँकि,संग्रहीत कार्यविधि जो बदले में इनपुट का उपयोग करके गतिशील एसक्यूएल उत्पन्न करती है, जब तक कि उचित सावधानी नहीं बरती जाती है, तब तक एसक्यूएल इंजेक्शन के लिए असुरक्षित है।


== अन्य उपयोग ==
== अन्य उपयोग ==
कुछ प्रणालियों में, लेनदेन प्रबंधन को नियंत्रित करने के लिए संग्रहित प्रक्रियाओं का उपयोग किया जा सकता है; दूसरों में, संग्रहीत कार्यविधियाँ एक लेन-देन के अंदर चलती हैं जैसे कि लेनदेन उनके लिए प्रभावी रूप से पारदर्शी होते हैं। संग्रहीत प्रक्रियाओं को [[डेटाबेस ट्रिगर]] या कंडीशन हैंडलर से भी प्रयुक्त किया जा सकता है। उदाहरण के लिए, एक संग्रहीत कार्यविधि को किसी विशिष्ट तालिका में सम्मिलित करके, या किसी तालिका में किसी विशिष्ट फ़ील्ड के अद्यतन द्वारा ट्रिगर किया जा सकता है, और संग्रहीत कार्यविधि के अंदर कोड निष्पादित किया जाएगा। कंडीशन हैंडलर के रूप में संग्रहीत कार्यविधियाँ लिखने से डेटाबेस प्रशासक त्रुटियों को पकड़ने के लिए संग्रहीत प्रक्रियाओं का उपयोग करके प्रणाली में त्रुटियों को ट्रैक करने की अनुमति देता है और डेटाबेस या फ़ाइल जैसे बाहरी संसाधन में कुछ ऑडिट जानकारी रिकॉर्ड करता है।
कुछ प्रणालियों में, लेनदेन प्रबंधन को नियंत्रित करने के लिए संग्रहित प्रक्रियाओं का उपयोग किया जा सकता है; दूसरों में, संग्रहीत कार्य विधियाँ लेन-देन के अंदर चलती हैं जैसे कि लेनदेन उनके लिए प्रभावी रूप से पारदर्शी होते हैं। संग्रहीत प्रक्रियाओं को [[डेटाबेस ट्रिगर]] या कंडीशन हैंडलर से भी प्रयुक्त किया जा सकता है। उदाहरण के लिए,संग्रहीत कार्यविधि को किसी विशिष्ट तालिका में सम्मिलित करके, या किसी तालिका में किसी विशिष्ट फ़ील्ड के अद्यतन द्वारा ट्रिगर किया जा सकता है, और संग्रहीत कार्यविधि के अंदर कोड निष्पादित किया जाएगा। कंडीशन हैंडलर के रूप में संग्रहीत कार्यविधियाँ लिखने से डेटाबेस प्रशासक त्रुटियों को पकड़ने के लिए संग्रहीत प्रक्रियाओं का उपयोग करके प्रणाली में त्रुटियों को ट्रैक करने की अनुमति देता है और डेटाबेस या फ़ाइल जैसे बाहरी संसाधन में कुछ ऑडिट जानकारी रिकॉर्ड करता है।


== कार्यों के साथ तुलना ==
== कार्यों के साथ तुलना ==
* एक फ़ंक्शन एक उपप्रोग्राम है जो कुछ संगणना करने के लिए लिखा जाता है।
* एक फलन उपप्रोग्राम है जो कुछ संगणना करने के लिए लिखा जाता है।
* एक स्केलर फ़ंक्शन केवल एक मान (या NULL) लौटाता है, जबकि एक टेबल फ़ंक्शन एक (संबंधपरक) तालिका देता है जिसमें शून्य या अधिक पंक्तियाँ होती हैं, प्रत्येक पंक्ति में एक या अधिक कॉलम होते हैं।
* एक स्केलर फलन  केवल मान (या व्यर्थ) लौटाता है, जबकि टेबल फलन (संबंधपरक) तालिका देता है जिसमें शून्य या अधिक पंक्तियाँ होती हैं, प्रत्येक पंक्ति में या अधिक स्तंभ होते हैं।
* कार्यों को एक मान वापस करना चाहिए ( <code>RETURN</code> कीवर्ड), किन्तु संग्रहित प्रक्रियाओं के लिए यह अनिवार्य नहीं है।
* फलन को वैल्यू वापस करना चाहिए ( वापसी कीवर्ड), किन्तु संग्रहित प्रक्रियाओं के लिए यह अनिवार्य नहीं है।
* संग्रहीत कार्यविधियाँ उपयोग कर सकती हैं <code>RETURN</code> कीवर्ड किन्तु बिना किसी मूल्य के पारित किया जा रहा है।
* संग्रहीत कार्यविधियाँ उपयोग कर सकती हैं वापसी कीवर्ड किन्तु बिना किसी मूल्य के पारित किया जा रहा है।
* कार्यों में उपयोग किया जा सकता है <code>SELECT</code> बयान, परंतु वे कोई डेटा हेरफेर न करें। चूँकि, प्रक्रियाओं को इसमें सम्मिलित  नहीं किया जा सकता है <code>SELECT</code> बयान।
* कार्यों में उपयोग किया जा सकता है चयन बयान, परंतु वे कोई डेटा हेरफेर न करें। चूँकि, प्रक्रियाओं को इसमें सम्मिलित  नहीं किया जा सकता है चयन बयान।
* एक संग्रहीत कार्यविधि का उपयोग करके कई मान वापस कर सकते हैं <code>OUT</code> पैरामीटर, या कोई मान नहीं देता है।
* एक संग्रहीत कार्यविधि का उपयोग करके कई मान वापस कर सकते हैं <code>OUT</code> पैरामीटर, या कोई मान नहीं देता है।
* एक संग्रहीत प्रक्रिया क्वेरी संकलन समय बचाती है।
* एक संग्रहीत प्रक्रिया क्वेरी संकलन समय बचाती है।
* एक संग्रहीत कार्यविधि एक डेटाबेस वस्तु है।
* एक संग्रहीत कार्य विधि डेटाबेस वस्तु है।
* एक संग्रहीत कार्यविधि एक भौतिक वस्तु है।
* एक संग्रहीत कार्य विधि भौतिक वस्तु है।


== [[तैयार बयान]]ों के साथ तुलना ==
== [[तैयार बयान|तैयार बयानो]] के साथ तुलना ==
तैयार बयान एक सामान्य बयान या क्वेरी लेते हैं और इसे पैरामीटर बनाते हैं जिससे बाद में विभिन्न शाब्दिक मूल्यों का उपयोग किया जा सके। संग्रहीत प्रक्रियाओं की तरह, वे दक्षता के लिए सर्वर पर संग्रहीत होते हैं और SQL इंजेक्शन हमलों से कुछ सुरक्षा प्रदान करते हैं। चूंकि सरल और अधिक घोषणात्मक, तैयार किए गए बयान सामान्यतः प्रक्रियात्मक तर्क का उपयोग करने के लिए नहीं लिखे जाते हैं और चर पर काम नहीं कर सकते हैं। उनके सरल इंटरफ़ेस और क्लाइंट-साइड कार्यान्वयन के कारण, तैयार किए गए कथन DBMS के बीच अधिक व्यापक रूप से पुन: प्रयोज्य हैं।
तैयार बयान सामान्य बयान या क्वेरी लेते हैं और इसे पैरामीटर बनाते हैं जिससे बाद में विभिन्न शाब्दिक मूल्यों का उपयोग किया जा सके। संग्रहीत प्रक्रियाओं की तरह, वे दक्षता के लिए सर्वर पर संग्रहीत होते हैं और एसक्यूएल इंजेक्शन हमलों से कुछ सुरक्षा प्रदान करते हैं। चूंकि सरल और अधिक घोषणात्मक, तैयार किए गए बयान सामान्यतः प्रक्रियात्मक तर्क का उपयोग करने के लिए नहीं लिखे जाते हैं और चर पर काम नहीं कर सकते हैं। उनके सरल अंतराफलक और क्लाइंट-साइड कार्यान्वयन के कारण, तैयार किए गए कथन डीबीएमएस के बीच अधिक व्यापक रूप से पुन: प्रयोज्य हैं।


== [[स्मार्ट अनुबंध]]ों के साथ तुलना ==
== [[स्मार्ट अनुबंध|बुद्धिमान अनुबंधो]] के साथ तुलना ==
स्मार्ट कॉन्ट्रैक्ट एक ऐसा शब्द है जो आरडीबीएमएस के विपरीत [[ब्लॉकचैन]] पर संग्रहीत निष्पादन योग्य कोड पर प्रयुक्त होता है। सार्वजनिक ब्लॉकचैन नेटवर्क के निष्पादन परिणाम आम सहमति तंत्र पारंपरिक निजी या संघीय डेटाबेस से सिद्धांत रूप में भिन्न होने के अतिरिक्त, वे सामान्य रूप से संग्रहीत प्रक्रियाओं के समान कार्य करते हैं, चूंकि सामान्यतः मूल्य लेनदेन की भावना के साथ।
स्मार्ट कॉन्ट्रैक्ट ऐसा शब्द है जो आरडीबीएमएस के विपरीत [[ब्लॉकचैन|ब्लॉकश्रृंखला]] पर संग्रहीत निष्पादन योग्य कोड पर प्रयुक्त होता है। सार्वजनिक ब्लॉकश्रृंखला नेटवर्क के निष्पादन परिणाम आम सहमति तंत्र पारंपरिक निजी या संघीय डेटाबेस से सिद्धांत रूप में भिन्न होने के अतिरिक्त, वे सामान्य रूप से संग्रहीत प्रक्रियाओं के समान कार्य करते हैं, चूंकि सामान्यतः मूल्य लेनदेन की भावना के साथ।


== हानि ==
== हानि ==
* संग्रहीत प्रक्रिया भाषाएँ अधिकांशतः विक्रेता-विशिष्ट होती हैं। डेटाबेस विक्रेताओं को बदलने के लिए सामान्यतः वर्तमान संग्रहीत कार्यविधियों को फिर से लिखने की आवश्यकता होती है।
* संग्रहीत प्रक्रिया भाषाएँ अधिकांशतः विक्रेता-विशिष्ट होती हैं। डेटाबेस विक्रेताओं को बदलने के लिए सामान्यतः वर्तमान संग्रहीत कार्य विधियों को फिर से लिखने की आवश्यकता होती है।
* संग्रहीत प्रक्रियाओं में परिवर्तन अन्य कोड की तुलना में संस्करण नियंत्रण प्रणाली के अंदर ट्रैक करना कठिन होता है। सम्मिलित  किए जाने के लिए प्रोजेक्ट इतिहास में संग्रहीत की जाने वाली स्क्रिप्ट के रूप में परिवर्तनों को पुन: प्रस्तुत किया जाना चाहिए, और प्रक्रियाओं में अंतर को मर्ज करना और सही विधि से ट्रैक करना कठिन हो सकता है।
* संग्रहीत प्रक्रियाओं में परिवर्तन अन्य कोड की तुलना में संस्करण नियंत्रण प्रणाली के अंदर ट्रैक करना कठिन होता है। सम्मिलित  किए जाने के लिए प्रोजेक्ट इतिहास में संग्रहीत की जाने वाली स्क्रिप्ट के रूप में परिवर्तनों को पुन: प्रस्तुत किया जाना चाहिए, और प्रक्रियाओं में अंतर को मिलाना और सही विधि से ट्रैक करना कठिन हो सकता है।
* संग्रहीत कार्यविधियों में त्रुटियों को एक संकलन के भाग के रूप में नहीं पकड़ा जा सकता है या किसी एप्लिकेशन IDE में चरण का निर्माण नहीं किया जा सकता है - यदि कोई संग्रहीत कार्यविधि गुम हो गई है या गलती से हटा दी गई है, तो यह सच है।
* संग्रहीत कार्यविधियों में त्रुटियों कोसंकलन के भाग के रूप में नहीं पकड़ा जा सकता है या किसी एप्लिकेशन आईडीई में चरण का निर्माण नहीं किया जा सकता है - यदि कोई संग्रहीत कार्यविधि गुम हो गई है या गलती से हटा दी गई है, तो यह सच है।
* विभिन्न विक्रेताओं की संग्रहीत प्रक्रिया भाषाओं में परिष्कार के विभिन्न स्तर होते हैं।
* विभिन्न विक्रेताओं की संग्रहीत प्रक्रिया भाषाओं में परिष्कार के विभिन्न स्तर होते हैं।
** उदाहरण के लिए, माइक्रोसॉफ्ट के टी-एसक्यूएल की तुलना में पोस्टग्रेस 'पीजीपीएसक्यूएल में अधिक भाषा सुविधाएं (विशेष रूप से एक्सटेंशन के माध्यम से) हैं।{{Citation needed|date=May 2012}}
** उदाहरण के लिए, माइक्रोसॉफ्ट के टी-एसक्यूएल की तुलना में पोस्टग्रेस 'पीजीपीएसक्यूएल में अधिक भाषा सुविधाएं (विशेष रूप से विस्तार के माध्यम से) हैं।
*संग्रहीत कार्यविधियों को लिखने और डिबग करने के लिए उपकरण समर्थन अधिकांशतः अन्य प्रोग्रामिंग भाषाओं के लिए उतना अच्छा नहीं होता है, किन्तु यह विक्रेताओं और भाषाओं के बीच भिन्न होता है।
*संग्रहीत कार्यविधियों को लिखने और डिबग करने के लिए उपकरण समर्थन अधिकांशतः अन्य प्रोग्रामिंग भाषाओं के लिए उतना अच्छा नहीं होता है, किन्तु यह विक्रेताओं और भाषाओं के बीच भिन्न होता है।
** उदाहरण के लिए, PL/SQL और T-SQL दोनों के पास समर्पित IDE और डिबगर्स हैं। PL/PgSQL को विभिन्न IDE से डिबग किया जा सकता है।
** उदाहरण के लिए, पी एल/एसक्यूएल और टी-एसक्यूएल दोनों के पास समर्पित आईडीई  और डिबगर्स हैं। पीएल/पीजी एसक्यूएल को विभिन्न आईडीई से डिबग किया जा सकता है।


== संदर्भ ==
== संदर्भ ==
Line 113: Line 122:


== बाहरी संबंध ==
== बाहरी संबंध ==
*[http://dev.mysql.com/doc/refman/5.7/en/faqs-stored-procs.html Stored Procedures in MySQL FAQ]
*[http://dev.mysql.com/doc/refman/5.7/en/faqs-stored-procs.html Stored Procedures in Myएसक्यूएल FAQ]
*[http://www.postgresql.org/docs/current/interactive/xplang.html An overview of PostgreSQL Procedural Language support]
*[http://www.postgresql.org/docs/current/interactive/xplang.html An overview of Postgreएसक्यूएल Procedural Language support]
*[http://www.petersap.nl/SybaseWiki/index.php/Stored_procedure Using a stored procedure in Sybase ASE]
*[http://www.petersap.nl/SybaseWiki/index.php/Stored_procedure Using a stored procedure in Sybase ASE]
*[http://infolab.stanford.edu/~ullman/fcdb/oracle/or-plsql.html#procedures PL/SQL Procedures]
*[http://infolab.stanford.edu/~ullman/fcdb/oracle/or-plsql.html#procedures PL/एसक्यूएल Procedures]
*[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/toc.htm Oracle Database PL/SQL Language Reference]
*[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/toc.htm Oracle Database PL/एसक्यूएल Language Reference]
*[https://help.sap.com/viewer/de2486ee947e43e684d39702027f8a94/2.0.03/en-US/297af2926307446cbbfb1a8f96fec941.html SAP HANA SQLScript Reference]
*[https://help.sap.com/viewer/de2486ee947e43e684d39702027f8a94/2.0.03/en-US/297af2926307446cbbfb1a8f96fec941.html SAP HANA एसक्यूएलScript Reference]
{{databases}}
{{databases}}



Revision as of 18:00, 22 February 2023

एक संग्रहीत कार्यविधि (जिसे प्रोक, स्टॉर्प, स्पोक, स्टोप्रो, स्टोरप्रोक, स्टोर्डप्रोक, एसपी, या एसपी भी कहा जाता है) सबरूटीन है जो उन अनुप्रयोगों के लिए उपलब्ध है जोसंबंधपरक डेटाबेस प्रबंधन प्रणाली (आरडीबीएमएस) तक पहुंचते हैं। ऐसी प्रक्रियाओं को डेटाबेस डेटा शब्दकोश में संग्रहीत किया जाता है।

संग्रहीत कार्य विधियों के उपयोग में डेटा-सत्यापन (डेटाबेस में एकीकृत) या अभिगम नियंत्रण सम्मिलित है | इसके अतिरिक्त, संग्रहीत कार्य विधियाँ तर्क को मजबूत और केंद्रीकृत कर सकती हैं जो मूल रूप से अनुप्रयोगों में प्रयुक्त किया गया था। समय और स्मृति को बचाने के लिए, व्यापक या जटिल प्रसंस्करण जिसके लिए कई एसक्यूएल कथनों के निष्पादन की आवश्यकता होती है, को संग्रहीत कार्य विधियों में सहेजा जा सकता है, और सभी अनुप्रयोग प्रक्रियाओं को पुकारते हैं।संग्रहीत कार्यविधि को दूसरे के अंदर निष्पादित करके नेस्टेड संग्रहीत कार्यविधियों का उपयोग किया जा सकता है।

संग्रहीत कार्यविधियाँ परिणाम संग्रह को लौटा सकती हैं, अर्थात, a के परिणाम चयन कथन। इस तरह के परिणाम संग्रह को कर्सर (डेटाबेस) का उपयोग करके, अन्य संग्रहीत प्रक्रियाओं द्वारा, परिणाम-संग्रह लोकेटर को जोड़कर या अनुप्रयोगों द्वारा संसाधित किया जा सकता है। संग्रहीत कार्य विधियों में डेटा और कर्सर को संसाधित करने के लिए घोषित चर भी हो सकते हैं जो इसे तालिका में कई पंक्तियों के माध्यम से लूप करने की अनुमति देते हैं। संग्रहीत-प्रक्रिया प्रवाह-नियंत्रण कथनों में सामान्यतः सम्मिलित होते हैं IF, WHILE, LOOP, REPEAT, और CASE बयान, और बहुत कुछ। संग्रहीत कार्य विधियाँ चर प्राप्त कर सकती हैं, परिणाम वापस कर सकती हैं या चर को संशोधित कर सकती हैं और उन्हें वापस कर सकती हैं, यह इस बात पर निर्भर करता है कि चर कैसे और कहाँ घोषित किया गया है।

कार्यान्वयन

संग्रहीत कार्यविधियाँ उपयोगकर्ता-परिभाषित कार्यों (यूडीएफs) के समान हैं। प्रमुख अंतर यह है कि यूडीएफ को एसक्यूएल बयानों के अंदर किसी भी अन्य अभिव्यक्ति की तरह उपयोग किया जा सकता है, जबकि संग्रहित प्रक्रियाओं को उपयोग करके प्रयुक्त किया जाना चाहिए CALL कथन।[1]

कॉल प्रक्रिया (...)

या

निष्पादन प्रक्रिया (...)

संग्रहीत कार्य विधियों का स्पष्ट और सही कार्यान्वयनडेटाबेस प्रणाली से दूसरे में भिन्न होता है। अधिकांश प्रमुख डेटाबेस विक्रेता किसी न किसी रूप में उनका समर्थन करते हैं। डेटाबेस प्रणाली के आधार पर, संग्रहीत कार्य विधियाँ विभिन्न प्रकार की प्रोग्रामिंग भाषाओं में प्रयुक्त की जा सकती हैं, उदाहरण के लिए एसक्यूएल, जावा (प्रोग्रामिंग भाषा), सी (प्रोग्रामिंग भाषा), या सी++। गैर-एसक्यूएल भाषाओं में लिखी गई संग्रहीत कार्यविधियाँ स्वयं एसक्यूएल कथनों को निष्पादित कर सकती हैं या नहीं भी कर सकती हैं।

संग्रहीत कार्यविधियों के बढ़ते अपनाने के कारण एसक्यूएल:1999 में एसक्यूएल भाषा में प्रक्रियात्मक तत्वों की प्रारंभिक हुई और एसक्यूएल/पीएसएम भाग में एसक्यूएल:2003 मानक। इसने एसक्यूएल कोअनिवार्य प्रोग्रामिंग भाषा बना दिया। अधिकांश डेटाबेस प्रणाली एसक्यूएल/पीएसएम से अधिक मालिकाना और विक्रेता-विशिष्ट एक्सटेंशन प्रदान करते हैं। जावा संग्रहीत कार्यविधियों के लिएमानक विनिर्देश एसक्यूएल/जेआरटी के साथ-साथ उपस्थित है।

Database system Implementation language
CUBRID Java
IBM Db2 एसक्यूएल PL (close to the एसक्यूएल/PSM standard) or Java
Firebird Pएसक्यूएल (Fyracle also supports portions of Oracle's PL/एसक्यूएल)
Informix Java
Interbase Stored Procedure and Trigger Language
Microsoft एसक्यूएल Server Transact-एसक्यूएल and various .NET Framework languages
Myएसक्यूएल, MariaDB own stored procedures, closely adhering to एसक्यूएल/PSM standard
NuoDB एसक्यूएल or Java
OpenLink Virtuoso Virtuoso एसक्यूएल Procedures (VSP);[2] also extensible via Java, C, and other programming languages
Oracle PL/एसक्यूएल or Java
Postgreएसक्यूएल PL/pgएसक्यूएल, can also use own function languages such as PL/Perl or PL/PHP
SAP HANA एसक्यूएलScript or R
SAP ASE Transact-एसक्यूएल
SAP एसक्यूएल Anywhere Transact-एसक्यूएल, Watcom एसक्यूएल
एसक्यूएलite Not supported



== स्थिर एसक्यूएल == के साथ तुलना

ओवरहेड
क्योंकि संग्रहीत कार्यविधि विवरण सीधे डेटाबेस में संग्रहीत किए जाते हैं, वे संकलन ओवरहेड के सभी या कुछ हिस्सों को हटा सकते हैं जो सामान्यतः उन स्थितियों में आवश्यक होते हैं जहां सॉफ़्टवेयर अनुप्रयोग डेटाबेस में इनलाइन (गतिशील) एसक्यूएल प्रश्न भेजते हैं। (चूंकि, अधिकांश डेटाबेस प्रणाली गतिशील एसक्यूएल कथन को दोहराए जाने से बचने के लिए कथन कैश और अन्य विधि को प्रयुक्त करते हैं।) इसके अतिरिक्त, जब वे कुछ पूर्व-संकलित एसक्यूएल से बचते हैं, तो कथन इष्टतम निष्पादन योजना बनाने की जटिलता को जोड़ते हैं क्योंकि एसक्यूएल के सभी तर्क नहीं होते हैं। कथन संकलन समय पर प्रदान किए जाते हैं। विशिष्ट डेटाबेस कार्यान्वयन और विन्यास के आधार पर, संग्रहित प्रक्रियाओं बनाम सामान्य प्रश्नों या उपयोगकर्ता परिभाषित कार्यों से मिश्रित प्रदर्शन परिणाम देखे जा सकते हैं।
प्रसार यातायात से बचना
संग्रहीत कार्यविधियों का प्रमुख लाभ यह है कि वे सीधे डेटाबेस इंजन के अंदर चल सकती हैं।उत्पादन प्रणाली में, इसका सामान्यतः कारण है कि प्रक्रियाएं पूरी तरह से विशेष डेटाबेस सर्वर पर चलती हैं, जिसके पास एक्सेस किए जा रहे डेटा तक सीधी पहुंच होती है। यहाँ लाभ यह है कि नेटवर्क संचार निवेश को पूरी तरह से टाला जा सकता है। एसक्यूएल कथनों की जटिल श्रृंखला के लिए यह अधिक महत्वपूर्ण हो जाता है।

व्यापार तर्क को समाहित करना

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

पहुँच-अधिकारों का प्रत्यायोजन
कई प्रणालियों में, संग्रहीत कार्यविधियों को डेटाबेस तक पहुँच अधिकार प्रदान किए जा सकते हैं जो उन प्रक्रियाओं को निष्पादित करने वाले उपयोगकर्ताओं के पास सीधे नहीं होते हैं।

एसक्यूएल इंजेक्शन हमलों से कुछ सुरक्षा

इंजेक्शन हमलों से बचाने के लिए संग्रहीत कार्यविधियों का उपयोग किया जा सकता है। संग्रहीत कार्यविधि पैरामीटर को डेटा के रूप में माना जाएगा, तथापि कोई हमलावर एसक्यूएल आदेश सम्मिलित करता है। साथ ही, कुछ डीबीएमएस पैरामीटर के प्रकार की जाँच करेंगे। चूँकि,संग्रहीत कार्यविधि जो बदले में इनपुट का उपयोग करके गतिशील एसक्यूएल उत्पन्न करती है, जब तक कि उचित सावधानी नहीं बरती जाती है, तब तक एसक्यूएल इंजेक्शन के लिए असुरक्षित है।

अन्य उपयोग

कुछ प्रणालियों में, लेनदेन प्रबंधन को नियंत्रित करने के लिए संग्रहित प्रक्रियाओं का उपयोग किया जा सकता है; दूसरों में, संग्रहीत कार्य विधियाँ लेन-देन के अंदर चलती हैं जैसे कि लेनदेन उनके लिए प्रभावी रूप से पारदर्शी होते हैं। संग्रहीत प्रक्रियाओं को डेटाबेस ट्रिगर या कंडीशन हैंडलर से भी प्रयुक्त किया जा सकता है। उदाहरण के लिए,संग्रहीत कार्यविधि को किसी विशिष्ट तालिका में सम्मिलित करके, या किसी तालिका में किसी विशिष्ट फ़ील्ड के अद्यतन द्वारा ट्रिगर किया जा सकता है, और संग्रहीत कार्यविधि के अंदर कोड निष्पादित किया जाएगा। कंडीशन हैंडलर के रूप में संग्रहीत कार्यविधियाँ लिखने से डेटाबेस प्रशासक त्रुटियों को पकड़ने के लिए संग्रहीत प्रक्रियाओं का उपयोग करके प्रणाली में त्रुटियों को ट्रैक करने की अनुमति देता है और डेटाबेस या फ़ाइल जैसे बाहरी संसाधन में कुछ ऑडिट जानकारी रिकॉर्ड करता है।

कार्यों के साथ तुलना

  • एक फलन उपप्रोग्राम है जो कुछ संगणना करने के लिए लिखा जाता है।
  • एक स्केलर फलन केवल मान (या व्यर्थ) लौटाता है, जबकि टेबल फलन (संबंधपरक) तालिका देता है जिसमें शून्य या अधिक पंक्तियाँ होती हैं, प्रत्येक पंक्ति में या अधिक स्तंभ होते हैं।
  • फलन को वैल्यू वापस करना चाहिए ( वापसी कीवर्ड), किन्तु संग्रहित प्रक्रियाओं के लिए यह अनिवार्य नहीं है।
  • संग्रहीत कार्यविधियाँ उपयोग कर सकती हैं वापसी कीवर्ड किन्तु बिना किसी मूल्य के पारित किया जा रहा है।
  • कार्यों में उपयोग किया जा सकता है चयन बयान, परंतु वे कोई डेटा हेरफेर न करें। चूँकि, प्रक्रियाओं को इसमें सम्मिलित नहीं किया जा सकता है चयन बयान।
  • एक संग्रहीत कार्यविधि का उपयोग करके कई मान वापस कर सकते हैं OUT पैरामीटर, या कोई मान नहीं देता है।
  • एक संग्रहीत प्रक्रिया क्वेरी संकलन समय बचाती है।
  • एक संग्रहीत कार्य विधि डेटाबेस वस्तु है।
  • एक संग्रहीत कार्य विधि भौतिक वस्तु है।

तैयार बयानो के साथ तुलना

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

बुद्धिमान अनुबंधो के साथ तुलना

स्मार्ट कॉन्ट्रैक्ट ऐसा शब्द है जो आरडीबीएमएस के विपरीत ब्लॉकश्रृंखला पर संग्रहीत निष्पादन योग्य कोड पर प्रयुक्त होता है। सार्वजनिक ब्लॉकश्रृंखला नेटवर्क के निष्पादन परिणाम आम सहमति तंत्र पारंपरिक निजी या संघीय डेटाबेस से सिद्धांत रूप में भिन्न होने के अतिरिक्त, वे सामान्य रूप से संग्रहीत प्रक्रियाओं के समान कार्य करते हैं, चूंकि सामान्यतः मूल्य लेनदेन की भावना के साथ।

हानि

  • संग्रहीत प्रक्रिया भाषाएँ अधिकांशतः विक्रेता-विशिष्ट होती हैं। डेटाबेस विक्रेताओं को बदलने के लिए सामान्यतः वर्तमान संग्रहीत कार्य विधियों को फिर से लिखने की आवश्यकता होती है।
  • संग्रहीत प्रक्रियाओं में परिवर्तन अन्य कोड की तुलना में संस्करण नियंत्रण प्रणाली के अंदर ट्रैक करना कठिन होता है। सम्मिलित किए जाने के लिए प्रोजेक्ट इतिहास में संग्रहीत की जाने वाली स्क्रिप्ट के रूप में परिवर्तनों को पुन: प्रस्तुत किया जाना चाहिए, और प्रक्रियाओं में अंतर को मिलाना और सही विधि से ट्रैक करना कठिन हो सकता है।
  • संग्रहीत कार्यविधियों में त्रुटियों कोसंकलन के भाग के रूप में नहीं पकड़ा जा सकता है या किसी एप्लिकेशन आईडीई में चरण का निर्माण नहीं किया जा सकता है - यदि कोई संग्रहीत कार्यविधि गुम हो गई है या गलती से हटा दी गई है, तो यह सच है।
  • विभिन्न विक्रेताओं की संग्रहीत प्रक्रिया भाषाओं में परिष्कार के विभिन्न स्तर होते हैं।
    • उदाहरण के लिए, माइक्रोसॉफ्ट के टी-एसक्यूएल की तुलना में पोस्टग्रेस 'पीजीपीएसक्यूएल में अधिक भाषा सुविधाएं (विशेष रूप से विस्तार के माध्यम से) हैं।
  • संग्रहीत कार्यविधियों को लिखने और डिबग करने के लिए उपकरण समर्थन अधिकांशतः अन्य प्रोग्रामिंग भाषाओं के लिए उतना अच्छा नहीं होता है, किन्तु यह विक्रेताओं और भाषाओं के बीच भिन्न होता है।
    • उदाहरण के लिए, पी एल/एसक्यूएल और टी-एसक्यूएल दोनों के पास समर्पित आईडीई और डिबगर्स हैं। पीएल/पीजी एसक्यूएल को विभिन्न आईडीई से डिबग किया जा सकता है।

संदर्भ

  1. "Db2 12 - Application programming and SQL - Calling a stored procedure from your application". www.ibm.com (in English). Retrieved 2022-05-26.
  2. "Chapter 11. SQL Procedure Language Guide". OpenLink documentation. Retrieved 11 September 2019.


बाहरी संबंध