Mysql синтаксис справки

0

У меня проблемы с написанием 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;
  • 0
    Что не работает, в чем ошибка?
  • 0
    Вы изменили DELIMTER на что-то другое, кроме; DELIMTER // код процедуры //
Показать ещё 1 комментарий
Теги:
stored-procedures

2 ответа

1
Лучший ответ

Я думаю, потому что имя процедуры не должно быть в '. 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 ;
0

Казалось бы, вам может не хватать инструкцию WHERE из проверки IF EXISTS в инструкции UPDATE.

Измените его на

UPDATE Customer
SET Password_Hashed = SPnewPassword
WHERE SPusername = Email
AND  SPoldPassword = Password_Hashed

Ещё вопросы

Сообщество Overcoder
Наверх
Меню