संग्रहीत प्रक्रिया

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

हानि

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

बाहरी संबंध

 * Stored Procedures in Myएसक्यूएल FAQ
 * An overview of Postgreएसक्यूएल Procedural Language support
 * Using a stored procedure in Sybase ASE
 * PL/एसक्यूएल Procedures
 * Oracle Database PL/एसक्यूएल Language Reference
 * SAP HANA एसक्यूएलScript Reference