又是oracle的存储过程问题,关于异常处理

铜戈 2000-08-15 10:11:00
代码如下
create or replace function department_sumup(depno char)
return integer
is
x integer;
y integer;
begin
x:=0;
y:=0;
begin
select sum(dj*sl) into x from s_jcxmk where trim(kbdm)=trim(depno) ;
EXCEPTION
WHEN others THEN
x:=0;
end;
select sum(ypdj*ypsl) into y from s_ypcfk where trim(kbdm)=trim(depno);
return(x+y);
EXCEPTION
WHEN others THEN
RETURN(x);
end;
当s_ypcfk 和s_jcxmk中的任一个库中没有该depno
该函数返回空,这是为什么?
我的异常处理写的有问题吗?
oracle 8.15i



...全文
147 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
9Thoughts 2000-08-17
  • 打赏
  • 举报
回复
你的例外是根本不会触发的,低级错误!

这样写最省事:
return(nvl(x)+nvl(y));
U皮特U 2000-08-15
  • 打赏
  • 举报
回复
能否考虑不用异常处理,而是直接判断select出来的值是否为空值,如是则重置为0。
hyzx2000 2000-08-15
  • 打赏
  • 举报
回复
将sum(dj*sl) 改为 sum( nvl(dj,0) * nvl(sl,0))
对sum(ypdj*ypsl)也做相似修改

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧