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


298

एक "संग्रहीत प्रक्रिया" क्या है और वे कैसे काम करती हैं?

एक संग्रहीत प्रक्रिया का मेकअप क्या है (प्रत्येक को एक संग्रहीत प्रक्रिया होनी चाहिए )?

जवाबों:


243

संग्रहीत प्रक्रियाएँ SQL कथनों का एक बैच होती हैं जिन्हें एक-दो तरीकों से निष्पादित किया जा सकता है। अधिकांश प्रमुख डीबीएम संग्रहीत प्रक्रियाओं का समर्थन करते हैं; हालाँकि, सभी ऐसा नहीं करते हैं। आपको विशेष के लिए अपने विशेष DBMS सहायता प्रलेखन के साथ सत्यापित करने की आवश्यकता होगी। जैसा कि मैं SQL सर्वर से सबसे अधिक परिचित हूं, मैं अपने नमूने के रूप में उपयोग करूंगा।

एक संग्रहीत कार्यविधि बनाने के लिए वाक्य रचना काफी सरल है:

CREATE PROCEDURE <owner>.<procedure name>

     <Param> <datatype>

AS

     <Body>

उदाहरण के लिए:

CREATE PROCEDURE Users_GetUserInfo

    @login nvarchar(30)=null

AS

    SELECT * from [Users]
    WHERE ISNULL(@login,login)=login

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

संग्रहीत प्रक्रिया डाउनसाइड्स के साथ आती हैं, मूल रूप से आपके मूल सीआरयूडी ऑपरेशन से जुड़े रखरखाव । मान लें कि प्रत्येक तालिका में आपके पास सम्मिलित करें, अद्यतन करें, हटाएं और प्राथमिक कुंजी के आधार पर कम से कम एक का चयन करें, इसका मतलब है कि प्रत्येक तालिका में 4 प्रक्रियाएं होंगी। अब 400 टेबल का एक सभ्य आकार डेटाबेस लें, और आपके पास 1600 प्रक्रियाएँ हैं! और आपको लगता है कि आपके पास डुप्लिकेट नहीं है जो आप शायद करेंगे।

यह वह जगह है जहां एक ORM या किसी अन्य विधि का उपयोग करके ऑटो को अपने मूल CRUD के संचालन से उत्पन्न किया जाता है।


1
आप डेटा को पढ़ने और संचालन करने के लिए ORMपसंद Entity Frameworkकरने के लिए संग्रहीत प्रक्रिया का मतलब है CRUD?
शैजुत

2
हाँ, यह एक संभव तरीका है। हम सब कुछ के लिए
ORM का

संग्रहीत प्रक्रिया आप मेरी यूआरएल उल्लेख कर सकते हैं के बारे में अधिक विस्तार के लिए techflirt.com/mysql-stored-procedure-tutorial
अंकुर कुमार सिंह

150

एक संग्रहीत कार्यविधि पूर्वनिर्धारित SQL कथनों का एक सेट है जो एक विशेष कार्य करने के लिए उपयोग किया जाता है।

उदाहरण: यदि मेरे पास ए Employee मेज है

Employee ID  Name       Age  Mobile
---------------------------------------
001          Sidheswar  25   9938885469
002          Pritish    32   9178542436

पहले मैं पुनः प्राप्त कर रहा हूं Employee तालिका को :

Create Procedure Employee details
As
Begin
    Select * from Employee
End

SQL सर्वर पर प्रक्रिया को चलाने के लिए:

Execute   Employee details

--- (Employee details is a user defined name, give a name as you want)

फिर दूसरा, मैं कर्मचारी तालिका में मान डाल रहा हूं

Create Procedure employee_insert
    (@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
    Insert Into Employee
    Values (@EmployeeID, @Name, @Age, @Mobile)
End

SQL सर्वर पर पैरामीट्रिक प्रक्रिया चलाने के लिए:

Execute employee_insert 003,’xyz’,27,1234567890

  --(Parameter size must be same as declared column size)

उदाहरण: @Name Varchar(30)

में Employeeतालिका Nameस्तंभ के आकार का होना चाहिए varchar(30)


1
उदाहरण है कि समझने में आसान है
हाफिज उमर

80

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

एक संग्रहीत प्रक्रिया बनाने का नमूना

CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;

EXEC test_display;

संग्रहीत प्रक्रियाओं का उपयोग करने के लाभ

  • एक संग्रहीत प्रक्रिया मॉड्यूलर प्रोग्रामिंग की अनुमति देती है।

    आप एक बार प्रक्रिया बना सकते हैं, इसे डेटाबेस में संग्रहीत कर सकते हैं, और इसे अपने कार्यक्रम में किसी भी समय कॉल कर सकते हैं।

  • एक संग्रहीत प्रक्रिया तेजी से निष्पादन की अनुमति देती है।

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

  • एक संग्रहीत प्रक्रिया नेटवर्क ट्रैफ़िक को कम कर सकती है।

    Transact-SQL कोड की सैकड़ों लाइनों की आवश्यकता वाले एक ऑपरेशन को एक कथन के माध्यम से निष्पादित किया जा सकता है जो नेटवर्क पर कोड की सैकड़ों लाइनों को भेजने के बजाय एक प्रक्रिया में कोड को निष्पादित करता है।

  • संग्रहीत प्रक्रियाएं आपके डेटा को बेहतर सुरक्षा प्रदान करती हैं

    उपयोगकर्ताओं को संग्रहीत प्रक्रिया को निष्पादित करने की अनुमति दी जा सकती है, भले ही उनके पास प्रक्रिया के विवरणों को सीधे निष्पादित करने की अनुमति न हो।

    SQL सर्वर में हमारे पास विभिन्न प्रकार की संग्रहीत प्रक्रियाएँ हैं:

    • सिस्टम संग्रहीत कार्यविधियाँ
    • उपयोगकर्ता-निर्धारित संग्रहीत कार्यविधियाँ
    • विस्तारित संग्रहीत कार्यविधियाँ
  • सिस्टम- स्टोर की गई प्रक्रियाओं को मास्टर डेटाबेस में संग्रहीत किया जाता है और ये एक sp_उपसर्ग के साथ शुरू होते हैं । सिस्टम टेबल में बाहरी एप्लिकेशन कॉल के लिए SQL सर्वर फ़ंक्शन का समर्थन करने के लिए इन प्रक्रियाओं का उपयोग विभिन्न प्रकार के कार्यों को करने के लिए किया जा सकता है

    उदाहरण: sp_helptext [StoredProcedure_Name]

  • उपयोगकर्ता-परिभाषित संग्रहीत प्रक्रियाएं आमतौर पर उपयोगकर्ता डेटाबेस में संग्रहीत होती हैं और आमतौर पर उपयोगकर्ता डेटाबेस में कार्यों को पूरा करने के लिए डिज़ाइन की जाती हैं। इन प्रक्रियाओं को कोड करते समय , उपसर्ग का उपयोग नहीं करते हैंsp_ क्योंकि यदि हम sp_पहले उपसर्ग का उपयोग करते हैं , तो यह मास्टर डेटाबेस की जांच करेगा, और फिर यह उपयोगकर्ता परिभाषित डेटाबेस के लिए आता है।

  • विस्तारित संग्रहीत कार्यविधियाँ वे प्रक्रियाएँ हैं जो DLL फ़ाइलों से कार्य करती हैं। आजकल, विस्तारित संग्रहीत प्रक्रियाओं को इस कारण से हटा दिया जाता है कि विस्तारित संग्रहीत प्रक्रियाओं का उपयोग करने से बचने के लिए बेहतर होगा।


37

आम तौर पर, एक संग्रहीत कार्यविधि "SQL फ़ंक्शन" होती है। उनके पास है:

-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID

यह एक टी-एसक्यूएल केंद्रित उदाहरण है। संग्रहीत कार्यविधियाँ अधिकांश SQL कथनों को निष्पादित कर सकती हैं, स्केलर और तालिका-आधारित मान लौटा सकती हैं, और उन्हें अधिक सुरक्षित माना जाता है क्योंकि वे SQL इंजेक्शन के हमलों को रोकते हैं।


16

इस तरह की स्थिति के बारे में सोचो,

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

ध्यान दें:

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

9

एक संग्रहीत कार्यविधि का उपयोग मुख्य रूप से डेटाबेस पर कुछ कार्य करने के लिए किया जाता है। उदाहरण के लिए

  • डेटा पर कुछ व्यावसायिक तर्क से डेटाबेस परिणाम सेट प्राप्त करें।
  • एकल कॉल में कई डेटाबेस संचालन निष्पादित करें।
  • एक तालिका से दूसरी तालिका में डेटा स्थानांतरित करने के लिए उपयोग किया जाता है।
  • जावा जैसी अन्य प्रोग्रामिंग भाषाओं के लिए बुलाया जा सकता है।

7

संग्रहीत कार्यविधि कुछ भी नहीं है, लेकिन SQL कथनों का समूह एकल निष्पादन योजना में संकलित है।

  1. एक बार बनाएं और इसे कई बार कॉल करें
  2. यह नेटवर्क ट्रैफिक को कम करता है

उदाहरण: एक संग्रहीत कार्यविधि बनाना

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetEmployee
      @EmployeeID int = 0
AS
BEGIN
      SET NOCOUNT ON;

      SELECT FirstName, LastName, BirthDate, City, Country
      FROM Employees 
      WHERE EmployeeID = @EmployeeID
END
GO

संग्रहीत प्रक्रिया को बदलना या संशोधित करना:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE GetEmployee
      @EmployeeID int = 0
AS
BEGIN
    SET NOCOUNT ON;

    SELECT FirstName, LastName, BirthDate, City, Country
    FROM Employees 
    WHERE EmployeeID = @EmployeeID
END
GO

संग्रहीत प्रक्रिया को छोड़ें या हटाएं:

DROP PROCEDURE GetEmployee

6

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


4
  • एक संग्रहीत कार्यविधि एक या एक से अधिक SQL कथनों का एक पूर्वनिर्धारित सेट है जो कुछ विशिष्ट कार्य करता है।

  • एक संग्रहीत कार्यविधि का उपयोग करके अकेले खड़े होना चाहिए EXEC

  • एक संग्रहीत प्रक्रिया कई मापदंडों को वापस कर सकती है

  • लेनदेन को लागू करने के लिए एक संग्रहीत प्रक्रिया का उपयोग किया जा सकता है


4

"एक संग्रहीत प्रक्रिया क्या है" यहां पहले से ही अन्य पदों पर उत्तर दिया गया है। मैं जो पोस्ट करूंगा वह संग्रहीत कार्यविधि का उपयोग करने का एक कम ज्ञात तरीका है। यह है grouping stored proceduresया numbering stored procedures

सिंटेक्स संदर्भ

यहां छवि विवरण दर्ज करें

; numberके अनुसार इस

एक वैकल्पिक पूर्णांक जो एक ही नाम के समूह प्रक्रियाओं के लिए प्रयोग किया जाता है। इन समूहीकृत प्रक्रियाओं को एक डीआरओपी प्रक्रिया विवरण का उपयोग करके एक साथ गिराया जा सकता है

उदाहरण

CREATE Procedure FirstTest 
(
    @InputA INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)
END
GO

CREATE Procedure FirstTest;2
(
    @InputA INT,
    @InputB INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO

उपयोग

exec FirstTest 10
exec FirstTest;2 20,30

परिणाम

यहां छवि विवरण दर्ज करें

एक और प्रयास

CREATE Procedure SecondTest;2
(
     @InputA INT,
    @InputB INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO

परिणाम

Msg 2730, Level 11, State 1, Procedure SecondTest, Line 1 [बैच प्रारंभ लाइन 3] 2 के समूह संख्या के साथ प्रक्रिया 'SecondTest' नहीं बना सकता क्योंकि एक ही नाम और 1 के समूह संख्या वाली प्रक्रिया वर्तमान में मौजूद नहीं है डेटाबेस। पहली प्रक्रिया 'सेकंडटेस्ट' को निष्पादित करना चाहिए; 1 पहला।

संदर्भ :

  1. संख्या के लिए सिंटैक्स के साथ प्रक्रिया बनाएँ
  2. SQL सर्वर में गिने संग्रहीत कार्यविधियाँ - techie-friendly.blogspot.com
  3. समूहन की प्रक्रियाएं - sqlmag

सावधान

  1. आपके द्वारा प्रक्रियाओं को समूहीकृत करने के बाद, आप उन्हें व्यक्तिगत रूप से नहीं छोड़ सकते।
  2. यह सुविधा Microsoft SQL सर्वर के भविष्य के संस्करण में निकाली जा सकती है।

0

संग्रहीत कार्यविधि SQL कथन और प्रक्रियात्मक तर्क का नाम संग्रह है, जो संकलित, सत्यापित और सर्वर डेटाबेस में संग्रहीत है। एक संग्रहीत प्रक्रिया को आमतौर पर अन्य डेटाबेस ऑब्जेक्ट्स की तरह व्यवहार किया जाता है और सर्वर सुरक्षा तंत्र के माध्यम से नियंत्रित किया जाता है।


0

DBMS में, एक संग्रहीत कार्यविधि SQL कथन का एक सेट नाम के साथ है जो डेटाबेस में संकलित रूप में संग्रहीत किया जाता है ताकि इसे कई कार्यक्रमों द्वारा साझा किया जा सके।

एक संग्रहीत प्रक्रिया का उपयोग इसमें सहायक हो सकता है

  1. डेटा तक एक नियंत्रित पहुंच प्रदान करना (अंतिम उपयोगकर्ता केवल डेटा दर्ज या बदल सकते हैं, लेकिन प्रक्रिया नहीं लिख सकते हैं)

  2. डेटा अखंडता सुनिश्चित करना (डेटा एक सुसंगत तरीके से दर्ज किया जाएगा) और

  3. उत्पादकता में सुधार (संग्रहीत प्रक्रिया के विवरण केवल एक बार लिखे जाने की आवश्यकता है)


0

सरल के लिए,

संग्रहित प्रक्रिया कर रहे हैं कार्यक्रम संग्रहित , एक कार्यक्रम / समारोह डेटाबेस में संग्रहीत।

प्रत्येक संग्रहीत प्रोग्राम में एक बॉडी होती है जिसमें SQL स्टेटमेंट होता है। यह कथन अर्धविराम (;) वर्णों द्वारा अलग किए गए कई कथनों से बना एक यौगिक कथन हो सकता है।

CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
  SET @x = 0;
  REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;

0

SQL सर्वर में संग्रहीत प्रक्रियाएँ इनपुट मापदंडों को स्वीकार कर सकती हैं और आउटपुट मापदंडों के कई मान लौटा सकती हैं; SQL सर्वर में, संग्रहीत कार्यविधियाँ डेटाबेस में संचालन करने और कॉलिंग प्रक्रिया या बैच के लिए स्थिति मान वापस करने के लिए प्रोग्राम स्टेटमेंट्स को संग्रहीत करती हैं।

SQL सर्वर में संग्रहीत कार्यविधियों का उपयोग करने के लाभ

वे मॉड्यूलर प्रोग्रामिंग की अनुमति देते हैं। वे तेजी से निष्पादन की अनुमति देते हैं। वे नेटवर्क ट्रैफ़िक को कम कर सकते हैं। उनका उपयोग सुरक्षा तंत्र के रूप में किया जा सकता है।

यहां एक संग्रहीत प्रक्रिया का एक उदाहरण है जो एक पैरामीटर लेता है, एक क्वेरी निष्पादित करता है और एक परिणाम देता है। विशेष रूप से, संग्रहीत कार्यविधि BusinessEntityID को एक पैरामीटर के रूप में स्वीकार करता है और इसका उपयोग अनुरोधकर्ता कर्मचारी को वापस करने के लिए HumanResources.Employee तालिका की प्राथमिक कुंजी से मेल खाने के लिए करता है।

> create procedure HumanResources.uspFindEmployee    `*<<<---Store procedure name`*
@businessEntityID                                     `<<<----parameter`
as
begin
SET NOCOUNT ON;
Select businessEntityId,              <<<----select statement to return one employee row
NationalIdNumber,
LoginID,
JobTitle,
HireData,
From HumanResources.Employee
where businessEntityId =@businessEntityId     <<<---parameter used as criteria
end

मैंने इसे आवश्यक.कॉम से सीखा ... यह बहुत उपयोगी है।


0

संग्रहीत प्रक्रिया आपको सर्वर में कोड बनाने में मदद करेगी। आप पैरामीटर पारित कर सकते हैं और आउटपुट पा सकते हैं।

create procedure_name (para1 int,para2 decimal)
as
select * from TableName

0

संग्रहीत कार्यविधियों में केवल एक बार लिखा जाता है और क्लाइंट और सर्वर के बीच नेटवर्क ट्रैफ़िक को कम करता है। हम Sql Injection हमलों से भी बच सकते हैं।

  • यदि आप भुगतान के प्रसंस्करण के लिए अपने आवेदन में किसी तीसरे पक्ष के कार्यक्रम का उपयोग कर रहे हैं तो समझें, यहां डेटाबेस को केवल आवश्यक जानकारी और गतिविधि को उजागर करना चाहिए जिसे इस तीसरे पक्ष द्वारा अधिकृत किया गया है, इसके द्वारा हम संग्रहीत प्रक्रियाओं का उपयोग करके अनुमतियों को सेट करके डेटा गोपनीयता प्राप्त कर सकते हैं।
  • तालिका का अपडेशन केवल उस तालिका को किया जाना चाहिए जिसे वह लक्षित कर रहा है, लेकिन उसे किसी अन्य तालिका को अपडेट नहीं करना चाहिए, जिसके द्वारा हम लेनदेन प्रसंस्करण और त्रुटि हैंडलिंग का उपयोग करके डेटा अखंडता प्राप्त कर सकते हैं।
  • यदि आप डेटा प्रकार के साथ एक या अधिक आइटम वापस करना चाहते हैं तो आउटपुट पैरामीटर का उपयोग करना बेहतर है।
  • संग्रहीत कार्यविधियों में, हम किसी भी चीज़ के लिए एक आउटपुट पैरामीटर का उपयोग करते हैं जिसे वापस करने की आवश्यकता होती है। यदि आप केवल एक पूर्णांक डेटा प्रकार के साथ केवल एक आइटम वापस करना चाहते हैं तो बेहतर है कि वापसी मूल्य का उपयोग करें। वास्तव में रिटर्न वैल्यू केवल स्टोर्ड प्रक्रिया की सफलता या विफलता को सूचित करने के लिए है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.