除法函数
场景:【100分】DB2 自定义除法函数 在存储过程中循环调用发生异常
【100分】DB2 自定义除法函数 在存储过程中循环调用发生错误
自定义函数
CREATE FUNCTION SCHEMANAME.DIVIDETEST
(
OP1 DECIMAL(10,2),
OP2 DECIMAL(10,2)
)
RETURNS DECIMAL(10,2)
LANGUAGE SQL
BEGIN ATOMIC
DECLARE RES DECIMAL(10,2);
IF OP2>0 THEN
SET RES=OP1/OP2;
ELSE
SET RES=99;
END IF;
RETURN RES;
END
存储过程
CREATE PROCEDURE CHEMANAME.PRO
(
IN OP1 DECIMAL(10,2),
IN OP2 DECIMAL(10,2),
IN NUM INTEGER
)
LANGUAGE SQL
BEGIN ATOMIC
DECLARE RES DECIMAL(10,2);
DECLARE V1 DECIMAL(10,2);
DECLARE V2 DECIMAL(10,2);
SET V1=OP1;
SET V2=OP2;
WHILE NUM>0 DO
SET RES=CHEMANAME.DIVIDETEST(V1,V2);
SET NUM=NUM-1;
END WHILE;
END
调用
CALL CHEMANAME.PRO(1,0,3)
发生错误提示为:‘列函数或算术表达式的处理导致了除零。’
但是在函数中 已经判断了除0的行为 为什么会这样呢
------解决方案--------------------
看起来好像没什么问题,你先test一下函数,如果没问题,再单步测试一下存储过程,跟进去看看,到底是执行到哪一步错了。
------解决方案--------------------
SET RES=CHEMANAME.DIVIDETEST(V1,V2);
前面加一个显示V1、V2值,检查一下参数是否正确,
在UDF中也显示一下OP1、OP2的值
你的SP、UDF参数 OP1、OP2,修改成不同的名称试试
------解决方案--------------------
CHEMANAME.DIVIDETEST 与 SCHEMANAME.DIVIDETEST 是笔误还是两个UDF?
------解决方案--------------------
好像没啥问题
------解决方案--------------------
【100分】DB2 自定义除法函数 在存储过程中循环调用发生错误
自定义函数
CREATE FUNCTION SCHEMANAME.DIVIDETEST
(
OP1 DECIMAL(10,2),
OP2 DECIMAL(10,2)
)
RETURNS DECIMAL(10,2)
LANGUAGE SQL
BEGIN ATOMIC
DECLARE RES DECIMAL(10,2);
IF OP2>0 THEN
SET RES=OP1/OP2;
ELSE
SET RES=99;
END IF;
RETURN RES;
END
存储过程
CREATE PROCEDURE CHEMANAME.PRO
(
IN OP1 DECIMAL(10,2),
IN OP2 DECIMAL(10,2),
IN NUM INTEGER
)
LANGUAGE SQL
BEGIN ATOMIC
DECLARE RES DECIMAL(10,2);
DECLARE V1 DECIMAL(10,2);
DECLARE V2 DECIMAL(10,2);
SET V1=OP1;
SET V2=OP2;
WHILE NUM>0 DO
SET RES=CHEMANAME.DIVIDETEST(V1,V2);
SET NUM=NUM-1;
END WHILE;
END
调用
CALL CHEMANAME.PRO(1,0,3)
发生错误提示为:‘列函数或算术表达式的处理导致了除零。’
但是在函数中 已经判断了除0的行为 为什么会这样呢
------解决方案--------------------
看起来好像没什么问题,你先test一下函数,如果没问题,再单步测试一下存储过程,跟进去看看,到底是执行到哪一步错了。
------解决方案--------------------
SET RES=CHEMANAME.DIVIDETEST(V1,V2);
前面加一个显示V1、V2值,检查一下参数是否正确,
在UDF中也显示一下OP1、OP2的值
你的SP、UDF参数 OP1、OP2,修改成不同的名称试试
------解决方案--------------------
CHEMANAME.DIVIDETEST 与 SCHEMANAME.DIVIDETEST 是笔误还是两个UDF?
------解决方案--------------------
好像没啥问题
------解决方案--------------------