Функция MYSQL, это Workbench или я просто нуб?

Я сижу с хранимой процедурой для MySQL уже несколько дней, она просто не будет работать, поэтому я подумал, что вернусь к основам и сделаю очень простую функцию, которая проверяет, существует ли элемент или нет.

Проблема, с которой я столкнулся в первом, заключалась в том, что он сказал, что END IF является недопустимым синтаксисом в одном из моих предложений IF, но не в двух других. Второй даже не распознает BEGIN как допустимый синтаксис...

Это я все понял неправильно, или я наткнулся на ошибку MYSQL Workbench? У меня есть Workbench 5.2 (последняя версия, когда я пишу это), и это код:

DELIMITER $$

CREATE FUNCTION `filmsidan`.`f_lateornot` (movie_id INT)
BEGIN
    DECLARE check_val INT;
    DECLARE return_val INT;

    SELECT stockId
    FROM orders
    WHERE stockId = movie_id
    INTO check_val;

    IF check_val <= 0
    THEN
        SET return_val = 1;
    ELSE
        SET return_val = 0;
    END IF;

    RETURN return_val;

END

person Christian Karlsson    schedule 25.05.2012    source источник


Ответы (3)


чтобы исправить синтаксическую ошибку «начало», вы должны объявить возвращаемое значение, например:

CREATE FUNCTION `filmsidan`.`f_lateornot` (movie_id INT) RETURNS INT(11)

после этого Workbench больше не будет возвращать ошибку ;o)

person Tobias Bambullis    schedule 25.05.2012

Вы должны указать возвращаемое значение в подписи, а разделитель в конце отсутствует. Итак, ваша функция должна выглядеть так

DELIMITER $$  
CREATE FUNCTION `filmsidan`.`f_lateornot` (movie_id INT) RETURNS INT
BEGIN  
DECLARE check_val INT;     
DECLARE return_val INT;      
SELECT stockId     
FROM orders     
WHERE stockId = movie_id     
INTO check_val;      
IF check_val <= 0     
THEN         
SET return_val = 1;     
ELSE         
SET return_val = 0;     
END IF;      
RETURN return_val;  
END
$$ 
person Rahul    schedule 25.05.2012

DELIMITER $$

CREATE FUNCTION `filmsidan`.`f_lateornot` (movie_id INT)
BEGIN
    DECLARE check_val INT;
    DECLARE return_val INT;

    SELECT stockId
    FROM orders
    WHERE stockId = movie_id
    INTO check_val;

    IF check_val <= 0
    THEN
        SET return_val = 1;
    ELSE
        SET return_val = 0;
    END IF;

    RETURN return_val;

END

$$

DELIMITER ;

Добавьте это последнее, что работает:

$$

DELIMITER ;

это означает, что вы используете ( ; ) это в функции, поэтому по этой причине мы используем его.. см.

а также см. MySQL - Проблемы с созданием пользовательской функции (UDF)

person Prasad Phule    schedule 06.12.2013