DROP FUNCTION IF EXISTS quersumme;
DELIMITER $$
CREATE FUNCTION input(a INTEGER) RETURNS INT
DETERMINISTIC
BEGIN
Declare temp char(10);
Declare i int Default 0;
Declare j int Default 0;
SET temp = convert(a,char(10));
WHILE i <= char_length(temp) DO
SET j = j + convert(substr(temp,i,1), unsigned integer);
END WHILE;
RETURN j;
END $$
本意想完成输入算各位数的和
select input(123); =====>结果应该是6.也就是1+2+3=6,即各位相加的和。
上面的小段落运行没问题,为什么一输入值做select,就会报错?
我直接做select convert(substr(123,i,1), unsigned integer);可以得到想要的数呀。
------解决方案--------------------
出什么错,你的循环都没有控制的循环体,i ++ 呢?死循环么?
------解决方案--------------------
DROP FUNCTION IF EXISTS input;
DELIMITER $$
CREATE FUNCTION input(a INTEGER) RETURNS INT
DETERMINISTIC
BEGIN
DECLARE temp VARCHAR(10);
DECLARE i INT DEFAULT 1;
DECLARE j INT DEFAULT 0;
DECLARE l INT ;
SET temp = CONVERT(a,CHAR);
SET l=CHAR_LENGTH(RTRIM(temp));
WHILE i <=l DO
SET j = j + CONVERT(SUBSTR(temp,i,1), UNSIGNED INTEGER);
SET i=i+1;
END WHILE;
RETURN j;
-- return l;
END $$
SELECT input(456);