DELIMITER //
CREATE PROCEDURE checkUser(IN in_email VARCHAR(80), IN in_password VARCHAR(50))
BEGIN
DECLARE tempId INT DEFAULT 0;
DECLARE tempName VARCHAR(50) DEFAULT NULL;
DECLARE done INT DEFAULT 0;
DECLARE cur CURSOR FOR
SELECT id, name FROM users WHERE email = in_email AND password = in_password;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
REPEAT
FETCH cur INTO tempId, tempName;
UPDATE users SET online = 1 WHERE id = tempId;
UNTIL done = 1 END REPEAT;
CLOSE cur;
SELECT tempName;
END //
DELIMITER ;
एनबी:मैंने इसका परीक्षण नहीं किया है। यह संभव है कि MySQL उस तालिका के विरुद्ध अद्यतन पसंद नहीं करता जिसके लिए वर्तमान में एक कर्सर खुला है।
पुनश्च:आपको पासवर्ड कैसे संगृहीत कर रहे हैं पर पुनर्विचार करना चाहिए .
RETURN
. के बारे में फिर से टिप्पणी करें बनाम OUT
बनाम परिणाम सेट:
RETURN
केवल संग्रहीत कार्यों में उपयोग किया जाता है, संग्रहीत कार्यविधियों में नहीं। संग्रहीत फ़ंक्शन का उपयोग तब किया जाता है जब आप रूटीन को किसी अन्य SQL अभिव्यक्ति में कॉल करना चाहते हैं।
SELECT LCASE( checkUserFunc(?, ?) );
आप एक OUT
का उपयोग कर सकते हैं पैरामीटर, लेकिन आपको उस पैरामीटर के रूप में पास करने के लिए पहले उपयोगकर्ता चर घोषित करना होगा। और फिर आपको किसी भी तरह से उसका मान प्राप्त करने के लिए उस उपयोगकर्ता चर का चयन करना होगा।
SET @outparam = null;
CALL checkUser(?, ?, @outparam);
SELECT @outparam;
संग्रहित प्रक्रिया से परिणाम सेट लौटाते समय, SELECT
. का उपयोग करना सबसे आसान होता है सवाल।