У меня проблемы с написанием SP в MySQL. Из того, что я могу читать в сети, должно работать следующее, но это не так. Я использую Mysql v. 5.1.35
CREATE DEFINER=`My_Username`@`%` PROCEDURE `ChangePassword`(IN SPusername VARCHAR(100),
IN SPoldPassword VARCHAR(100),
IN SPnewPassword VARCHAR(100))
BEGIN
IF EXISTS(SELECT Password_Hash
FROM Customer
WHERE SPusername = Email
AND SPoldPassword = Password_Hashed)
THEN
UPDATE Customer
SET Password_Hashed = SPnewPassword
END IF;
END;
Я думаю, потому что имя процедуры не должно быть в '. s.
В первой строке попробуйте следующее:
CREATE DEFINER='My_Username'@'%' PROCEDURE ChangePassword(IN SPusername VARCHAR(100),
Ох... и не забудьте также взглянуть на ответ наблюдателя относительно предложения WHERE в инструкции UPDATE. Без расширения предложения WHERE все пароли будут установлены одинаково... каждый раз! Он советует, это хорошо! (Хотя SQL-запрос будет работать):-)
С уважением
Sigersted
PS: полный запрос (с указанием разделителя и знака):
DELIMITER //
CREATE DEFINER='My_Username'@'%' PROCEDURE ChangePassword(
IN SPusername VARCHAR(100),
IN SPoldPassword VARCHAR(100),
IN SPnewPassword VARCHAR(100))
BEGIN
IF EXISTS(SELECT Password_Hash
FROM Customer
WHERE SPusername = Email
AND SPoldPassword = Password_Hashed)
THEN
UPDATE Customer
SET Password_Hashed = SPnewPassword
WHERE SPusername = Email
AND SPoldPassword = Password_Hashed;
END IF;
END//
DELIMITER ;
Казалось бы, вам может не хватать инструкцию WHERE из проверки IF EXISTS в инструкции UPDATE.
Измените его на
UPDATE Customer
SET Password_Hashed = SPnewPassword
WHERE SPusername = Email
AND SPoldPassword = Password_Hashed