首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > IBM DB2 >

【100分】DB2 自定义除法函数 在存储过程中循环调用发生异常

2012-02-05 
【100分】DB2 自定义除法函数 在存储过程中循环调用发生错误自定义函数CREATE FUNCTION SCHEMANAME.DIVIDETE

【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?

[解决办法]
好像没啥问题
[解决办法]

探讨
CHEMANAME.DIVIDETEST 与 SCHEMANAME.DIVIDETEST 是笔误还是两个UDF?

热点排行