【问题标题】:IF statement in MySQL stored function goes wrongMySQL存储函数中的IF语句出错
【发布时间】:2012-09-17 21:27:12
【问题描述】:

我在第 12 行(在 endif 语句处)收到一个错误。 我认为我在 IF 或 ELSE 中做错了什么,有人可以帮助我吗?

DELIMITER $$

CREATE FUNCTION TEST (`param` INT) 
RETURNS INT 
DETERMINISTIC
BEGIN
    DECLARE `var` INT;

    SET `var` = 1;

    IF `param` > 0 THEN
        SET `var` = `var` + `param`;
    END IF;

    RETURN `var`;
END$$

编辑:(相同的功能与 case 而不是 if,同样的问题)

DELIMITER $$

CREATE FUNCTION TEST (`param` INT) 
RETURNS INT 
DETERMINISTIC
BEGIN
    DECLARE `var` INT;

    SET `var` = 1;

    SET `var` = 
        CASE
            WHEN `param` > 0 THEN `var` + `param` ELSE `var`
        END ;

    RETURN `var`;
END$$

【问题讨论】:

标签: mysql sql stored-functions


【解决方案1】:

试试这个:

BEGIN
    DECLARE `var` INT;

    SET var = 
      CASE
        WHEN param > 0 THEN var + 1 ELSE var 
      END ;

    RETURN var;
END$$

【讨论】:

  • +1 用于使用案例。 :D 顺便问一下,为什么需要将var 的值设置为var
  • @JohnWoo 我不熟悉 mysql 语法,但是这些 ```` 伤害了我的眼睛,这就是我删除它的原因。
  • 不,我不是这个意思。可以SET var = CASE WHEN param > 0 THEN var + 1 END ;吗?
  • @JohnWoo 我认为不会,因为ELSE 将返回NULL 就我现在而言。这就是我使用ELSE var 的原因,如果你省略它,它将是NULL,以防param<= 0
  • 不要介意参数 > 0,这只是一个虚构的声明。但问题在于END。在这两种情况下它仍然会出错。
【解决方案2】:

发现这是 PHPMyAdmin 中的一个错误,如果我使用“添加例程”添加该函数,它就起作用了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2015-01-17
    • 2013-07-10
    • 1970-01-01
    • 2022-11-27
    相关资源
    最近更新 更多