MYSQL函数,是Workbench还是只是noobish me?

时间:2012-05-25 13:01:24

标签: mysql function workbench

我已经使用MySQL的存储过程了几天,它只是不起作用,所以我想我会回到基本的并做一个非常简单的函数来检查一个项目是否存在。< / p>

我在第一个问题上遇到的问题是它表示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

3 个答案:

答案 0 :(得分:1)

要修复“begin”语法错误,您必须声明一个返回值,如下所示:

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

执行此操作后,Workbench将不再返回错误; o)

答案 1 :(得分:1)

您必须在签名中指定返回值,并且最后缺少分隔符。所以,你的功能看起来应该是

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
$$ 

答案 2 :(得分:0)

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 - Trouble with creating user defined function (UDF)