给出相同结果的MySQL函数

给出相同结果的MySQL函数,mysql,function,Mysql,Function,我在MySQL中创建了以下函数,它总是以一个整数的形式给出结果,不管我给出的整数是什么,作为参数值 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=CA

我在MySQL中创建了以下函数,它总是以一个整数的形式给出结果,不管我给出的整数是什么,作为参数值

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 $$
分隔符$$
如果存在ISICN4A,则具有下降功能;
创建函数cdn(代码INT)
返回字符
读取SQL数据
确定性
开始
声明coden INT无符号默认值0;
声明ret CHAR;
设置ret=代码N355时的情况,然后设置“E”
否则无效
结束;
返回ret;
结束$$
分隔符$$

感谢您的评论和修改建议

函数接受一个参数
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;$$
分隔符$$
如果存在ISICN4A,则具有下降功能;
创建函数cdn(coden INT)返回字符
读取SQL数据
确定性
开始
声明ret CHAR;
设置ret=代码N355时的情况,然后设置“E”
否则无效
结束;
返回ret;
结束$$