我已经在MySQL中创建了以下函数,无论我给定参数值的整数如何,它总是给我结果A。

DELIMITER $$
DROP FUNCTION IF EXISTS ISICN4A;

CREATE FUNCTION cdn(coden INT)
RETURNS CHAR
READS SQL DATA
DETERMINISTIC
BEGIN
  DECLARE coden INT UNSIGNED DEFAULT 0;
  DECLARE ret CHAR;

 SET ret=CASE WHEN coden<=50 then 'A'
 when coden BETWEEN 51 AND 100 then 'B'
 when coden BETWEEN 101 AND 350 then 'C'
 when coden BETWEEN 351 AND 355 then 'D'
 when coden>355 then 'E'
 ELSE NULL
END;

RETURN ret;
END;$$

DELIMITER $$


感谢您的评价和建议以对其进行修改。

最佳答案

您的函数接受参数coden INT,但是您在函数体内声明了一个与参数名称相同的变量。
尝试从功能主体中删除DECLARE coden INT UNSIGNED DEFAULT 0;
这样您的函数将如下所示:

DELIMITER $$
DROP FUNCTION IF EXISTS ISICN4A;

CREATE FUNCTION cdn(coden INT) RETURNS CHAR
READS SQL DATA
DETERMINISTIC
BEGIN
    DECLARE ret CHAR;

    SET ret=CASE WHEN coden<=50 THEN 'A'
    WHEN coden BETWEEN 51 AND 100 THEN 'B'
    WHEN coden BETWEEN 101 AND 350 THEN 'C'
    WHEN coden BETWEEN 351 AND 355 THEN 'D'
    WHEN coden>355 THEN 'E'
    ELSE NULL
END;

RETURN ret;
END;$$

关于mysql - MySQL函数给出相同的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41839745/

10-12 04:28