Требуется справка по хранимым функциям Mysql

#mysql #stored-procedures #syntax

#mysql #хранимые процедуры #синтаксис

Вопрос:

Я только начинаю изучать хранимые функции в mysql. Может кто-нибудь, пожалуйста, сказать мне, что не так с приведенным ниже?

Phpmyadmin сообщает, что у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘return NAME; END //’ в строке 19

 DELIMITER //
DROP FUNCTION IF EXISTS getName //
CREATE FUNCTION getName(type CHAR(10), id int) RETURNS CHAR(50) DETERMINISTIC
BEGIN
    DECLARE NAME CHAR(50);
    CASE type
        WHEN 'offer' THEN 

        SELECT Type_Name INTO NAME FROM otypes WHERE Type_Id = id;          

        WHEN 'service' THEN 

        SELECT ServiceType_Name INTO NAME FROM stypes WHERE ServiceType_Id = id;    

        WHEN 'store' THEN 

        SELECT Store_Name INTO NAME FROM stores WHERE Store_Id = id;    

    END CASE

    return NAME;
END //
  

Ответ №1:

Поставьте точку с запятой после END CASE :

 DELIMITER //
DROP FUNCTION IF EXISTS getName //
CREATE FUNCTION getName(type CHAR(10), id int) RETURNS CHAR(50) DETERMINISTIC
BEGIN
    DECLARE NAME CHAR(50);
    CASE type
        WHEN 'offer' THEN 

        SELECT Type_Name INTO NAME FROM otypes WHERE Type_Id = id;          

        WHEN 'service' THEN 

        SELECT ServiceType_Name INTO NAME FROM stypes WHERE ServiceType_Id = id;    

        WHEN 'store' THEN 

        SELECT Store_Name INTO NAME FROM stores WHERE Store_Id = id;    

    END CASE;
--          ^

    return NAME;
END //
  

Ответ №2:

Вам не хватает ;

 END CASE

return NAME;
  

должно быть

 END CASE;

return NAME;