我在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 $$
感谢您的善意审核和修改建议。
答案 0 :(得分:0)
您的函数接受参数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;$$