0

几天来,我一直在使用 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
4

3 回答 3

1

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

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

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

于 2012-05-25T13:05:43.760 回答
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
$$ 
于 2012-05-25T13:13:01.253 回答
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 ;

这意味着您在函数中使用 ( ; ) this ,因此我们使用它..see

另请参阅 MySQL - 创建用户定义函数 (UDF) 时遇到问题

于 2013-12-06T12:57:31.013 回答