MySQL Stored Procedure in Hindi
|जब भी हमें MySQL के किसी भी Statement का Store करना हो तब हम Stored Procedure का उपयोग करते हैं, एक या एक से अधिक Statement को एक Sequence में Execute करने के लिए हम Stored Procedure का उपयोग करते हैं ।
यदि आप Video देखना चाहते हैं तो यहाँ से देख सकते हैं ।
Advantage of MySQL Stored Procedure के फायदे
- Stored Procedure से हम Select Query को Run कर उसके आउटपुट को देख सकते हैं ।
- Stored Procedure में हम Parameter Pass कर सकते हैं ।
- Stored Procedure में हम IN/OUT/INOUT तीन तरह से Parameter का उपयोग कर सकते हैं ।
- Stored Procedure में हम Insert/Update/Delete SQL Command Execute कर सकते है ।
- Stored Procedure में हम किसी भी प्रकार के Logic लगा सकते हैं ।
आइये सबसे पहले हम एक Simple Procedure बनाना सीखते हैं ।
हमारे अन्य Article
- MySQL Aggregate Function
- MySQL User Define Function (UDF)
- MySQL Trigger (Before/After)
- MySQL Update Stock/Balance Using Trigger
- PHP Introduction
- PHP Form Validations, Required, Filter
- SQL Logic Android App Download करे
MySQL Stored Procedure Without Parameter
यहाँ पर हमने एक Procedure बनाया हैं इसमें हमने एक SQL Execute की हैं जो की हमें 10 से कम Qty . वाले Item के Name Show करेगी ।
DELIMITER $$
CREATE PROCEDURE sp_GetMinStock ()
BEGIN
SELECT *
FROM mst_item
WHERE cl_qty <= 10;
END$$
DELIMITER ;
Execute करने के लिए आपको इस तरह से लिखना होगा ।
CALL sp_GetMinStock();
ऐसा करने से आपको कुछ इस प्रकार से Output प्राप्त होगा । यहाँ पर Stored Procedure Execute करने का पहले और बाद दोनों समय के Result निचे दिए गए हैं ।
MySQL Stored Procedure With IN Parameter
हमें पहले एक Fix SQL लिख कर Procedure बनाया था, अब हमने जो Number SQL में Fix किया था उसे Variable में ले कर Parameter के द्वारा Pass किया हैं ताकि किसी भी प्रकार का Fixation हमारे Stored Procedure में ना रहे ।IN : यह Parameter के Type को बताता हैं , यहाँ पर Parameter का उपयोग हम INPUT के लिए कर रहे हैं ।
DELIMITER $$
CREATE PROCEDURE sp_GetMinStock (IN p_id INT(9))
BEGIN
SELECT *
FROM mst_item
WHERE cl_qty <= p_id;
END$$
DELIMITER ;
अब हम इसे Execute कर देखते हैं । यहाँ पर हमे अब एक Parameter Pass करना होगा ।
CALL sp_GetMinStock(20);
इसका output कुछ इस प्रकार होगा ।
MySQL Stored Procedure With IN & OUT Parameter
इस Example में Item Table से Item का Name Display करना चाहते हैं और उसे Procedure से Return लेकर Select के द्वारा Show करेंगे
IN: यहाँ पर हम IN से Item_id को INPUT के लिए उपयोग में ले रहे हैं OUT: यहाँ पर हम OUT से p_nm यानि की Item के Name को OUTPUT के लिए उपयोग में ले रहे हैं ।INTO: जब हमें SQL द्वारा Display किये हुए Column की वैल्यू को किसी Variable में Store करना होती हैं तब हम INTO का उपयोग करते हैं, यहाँ पर हमने Item Name को p_nm variable में Store किया हैं । यहाँ पर हमेशा ध्यान रखे की SQL से एक या एक से कम Row ही Return होना चाहिए ।
DELIMITER $$
CREATE PROCEDURE sp_GetItemName(IN p_id INT(9), OUT p_nm VARCHAR(40))
BEGIN
SELECT item_nm into p_nm
FROM mst_item
WHERE item_id = p_id;
END$$
DELIMITER ;
अब इसे कुछ इस तरह से Execute करके देखेंगे ।
CALL sp_GetItemName(2, @nm);
SELECT @nm as ItemName;
जो भी mst_item में 2 id पर डाटा होगा वह आपको Display हो जाएगा
MySQL Stored Procedure With INOUT Parameter
जब हमें एक ही Parameter को IN और उसी को OUT के लिए उपयोग में लेते हैं तब INOUT Parameter का उपयोग करते हैं ।
DELIMITER $$
CREATE PROCEDURE sp_add10(INOUT i INT(9))
set i = i + 10$$
DELIMITER ;
इस प्रकार से इस Stored Procedure को Execute किया जाएगा ।
SET @v = 5;
CALL sp_add10(@v); //15
CALL sp_add10(@v); //25
SELECT @V;
यहाँ पर हमें BEGIN और END का उपयोग नहीं किया हैं क्युकी यह हमें एक ही Statement को Execute किया हैं ।यहाँ पर देखिये जहा से हमने Input किया वही से Output ही हो रहा हैं
MySQL Stored Procedure Using GUI
- 1. Click on Database : सबसे पहले डेटाबेस के नाम पर क्लिक करे ।
- 2. Click on More : यदि स्क्रीन की Width कम हुए तो यह Option दिखाई देगा) और नहीं दिखाई दे तो आप 3rd Step Follow करे ।
- 3. Click On Routines : अब आप Routines पर क्लिक करे ।
- 4. Add Routine : अब Add Routine पर क्लिक करे ।
इसके बाद कुछ इस तरह से स्क्रीन दिखाई देगी
- Routine Name : यहाँ पर जिस नाम से हम Procedure बना रहे हैं वह नाम लिखेंगे ।
- Type : यहाँ से हम Select करते हैं की हम Function बना रहे हैं की Procedure.
- Parameter : यहाँ पर आपको पैरामीटर देना होते हैं , यानि की जब हम प्रोसीजर को कॉल करे तब कुछ वैल्यू हमारे द्वारा प्रोसीजर को Input / Output की तौर पर दी जाती हैं , तो हम जितने भी Parameter देना चाहते हैं वह यहाँ पर सेलेक्ट करे ।
- Direction : यहाँ पर 3 Options होते हैं
- IN : जब हमें Parameter को as a INPUT उपयोग में लेना हो तब हम IN सेलेक्ट करते हैं ।
- OUT : जब हमें Parameter को as a OUTPUT उपयोग में लेना हो तब हम OUT सेलेक्ट करते हैं ।
- INOUT: जब हमें एक ही Parameter में IN and OUT दोनों का उपयोग करना होता हैं तब हम INOUT सेलेक्ट करते हैं ।
- Name : Parameter का नाम यहाँ पर लिखे
- Type : Parameter का Data Type यहाँ पर से Select करे ।
- Length : यहाँ पर Width लिखे ।
- Direction : यहाँ पर 3 Options होते हैं
- Definition : यह Parameter की Body हैं इसे हमें BEGIN से शुरू करना होती हैं और END से समाप्त किया जाता हैं । यदि आप एक से अधिक Statement का उपयोग कर रहे हैं तो आपको BEGIN….END लगाना होता हैं ।
- Is deterministic : यदि आपके फंक्शन में इनपुट की Value 1 होने पर Return 4 होता हैं और हर बार 1 input पर output 4 ही हो यानि की Input का Result हर Execution पर Same ही हो तो यहाँ पर Deterministic पर Tick करे अन्यथा उसे Untick ही रहने दे ।
- Adjust Privileges : में यह एक नया Feature हैं, जब आप किसी Function को Access Rights दे देते हैं और बाद में उसे Rename कर देते हैं तो PHP MyAdmin में Access Rights Automatically ही नए नाम पर Transfer कर देता हैं । यदि option Edit से open करने पर ही दिखाई देता हैं ।
- Definer : यहाँ पर User Permission दी जाती है ।
- Security Type : यहाँ पर यदि Definer सेलेक्ट हैं तो Function बनाने वाले की Access Rights के अनुसार Execution किया जाता हैं और यदि INVOKER select हैं तो Execution करने वाले के Access Rights के अनुसार Execute होता हैं ।
- SQL Data Access : जो हम Function बना रहे हैं इसमें हम SQL का कितना उपयोग कर रहे हैं वह हमें यहाँ से Select करना होता हैं । यह Character encoding के समय ही काम में आता हैं यदि यह कोई भी ऑप्शन select कर लेंगे तो भी Function कार्य करेगा ।NO SQL : यदि आप किसी भी प्रकार के SQL के Statement का उपयोग नहीं कर रहे हैं तब NO SQL लिखे ।
- MODIFIES SQL DATA: यदि आप INSERT UPDATE DELETE आदि का भी उपयोग कर रहे हैं तो यह यह वाला option Select करे ।
- READS SQL DATA : यदि आप केवल SELECT का ही उपयोग कर रहे हैं तो यह Option Select करे ।
- CONTAINS SQL : यदि आप SQL Statement का उपयोग तो कर रहे हैं लेकिन SELECT INSERT UPDATE DELETE का उपयोग नहीं कर रहे तब यह ऑप्शन Select करे ।
- Comment : यहाँ पर आप Procedure के बारे में कुछ नोट्स लिख सकते हैं ।
- इतना करने के बाद आप Parameter को Save करे ।
FAQ
Stored procedure taking long time to execute mysql?
- जब भी कोई भी Procedure Execute होने मे बहुत समय ले तब आप निम्न Steps की मदद से चेक कर सकते हैं ।
- यदि आपके Procedure मे एक से अधिक Statement हो तो आप सबसे पहले आप अपने प्रोसीजर मे कुछ कुछ गैप मे कोई भी Temp टेबल मे एक Temporary Insert SQL लिख कर देखे की कौन से Statement मे ज्यादा देरी लग रही हैं ।
- क्या कोई ऐसा Statement लिखा हुआ हुआ हैं जिससे Dead Lock की स्तिथि बन रही हैं , यानि की किसी टेबल पर कोई Lock लगा हैं और हम उसमे कोई Insert या Alter SQL का उपयोग कर रहे हैं तो वह Lock होने के कारण देरी लगेगी ।
- आपने जो भी SQL लिखी हैं उसे देखे की उसके कारण यदि देरी हो रही हैं तो आप SQL को Correct करे ।