MYSQL函数,是Workbench还是noobish?

MYSQL函数,是Workbench还是noobish?,mysql,function,workbench,Mysql,Function,Workbench,我已经用MySQL的存储过程坐了好几天了,它根本不起作用,所以我想我应该回到basic,做一个非常简单的函数来检查一个项目是否存在 第一个的问题是,它在我的一个IF子句上说END IF是无效语法,但在另外两个子句上不是。第二个甚至不能将BEGIN识别为有效语法 是我把一切都搞错了,还是我偶然发现了一个MYSQL工作台bug?我有Workbench 5.2(撰写本文时的最新版本),代码如下: DELIMITER $$ CREATE FUNCTION `filmsidan`.`f_lateorno

我已经用MySQL的存储过程坐了好几天了,它根本不起作用,所以我想我应该回到basic,做一个非常简单的函数来检查一个项目是否存在

第一个的问题是,它在我的一个IF子句上说END IF是无效语法,但在另外两个子句上不是。第二个甚至不能将BEGIN识别为有效语法

是我把一切都搞错了,还是我偶然发现了一个MYSQL工作台bug?我有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
分隔符$$
创建函数'filmsidan`.'f_lateornot`(电影id INT)
开始
申报支票;
声明返回值INT;
选择stockId
从命令
其中stockId=电影\u id
进入检查窗口;
如果选中_val以修复“begin”语法错误,则必须声明一个返回值,如下所示:

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

这样做之后,Workbench将不再返回错误;o)

您必须在签名中指定返回值,并且结尾的分隔符丢失。因此,您的函数应该如下所示

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
$$ 
分隔符$$
创建函数'filmsidan`.'f_lateornot`(movie_id INT)返回INT
开始
申报支票;
声明返回值INT;
选择stockId
从命令
其中stockId=电影\u id
进入检查窗口;
如果检查
这意味着您正在函数中使用(;),因此我们使用它。请参见

另见

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 ;