oracle 无法进入no_data_found 异常

zhangrongchao_ 2014-12-14 03:48:38
1:首先创建一个函数用于计算表emp中指定job的平均工资:

create or replace function get_avg_pay(var_job varchar2) return number is--创建一个函数,该函数实现计算某个职务的平均工资,传入职务名称参数
num_avg_pay number;--定义临时变量,保存某个职务的平均工资
begin
select avg(sal) into num_avg_pay from emp where job=var_job;--获取某个部门的平均工资
return(round(num_avg_pay,2));--返回平均工资
exception
when no_data_found then --若此职务不存在
dbms_output.put_line('该职务不存在');
return(0); --返回平均工资为0
end;
/

接着调用函数:

declare
avg_pay number;
begin
avg_pay := get_avg_pay('AAAAAA'); --不存在这个职位
dbms_output.put_line(avg_pay);
end;
/

为什么输出结果是过程以成功完成,但是,因为不存在AAAAAA的职位记录,不是应该出现no_data_found的异常么?


...全文
281 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangrongchao_ 2014-12-14
  • 打赏
  • 举报
回复
引用 2 楼 bw555 的回复:
因为你使用了组函数啊,默认组函数在没有记录时会有默认的返回值 如count会返回0,max、min、avg等会返回空,这样的话是不会触发异常的 使用组函数本来是避免出现no_data_found的一个方法,反倒让你纠结了,呵呵
最近版主已经两次为我解答,今天这个解答我已等了一天,我是一名初学者,实在感谢您。
bw555 2014-12-14
  • 打赏
  • 举报
回复
因为你使用了组函数啊,默认组函数在没有记录时会有默认的返回值 如count会返回0,max、min、avg等会返回空,这样的话是不会触发异常的 使用组函数本来是避免出现no_data_found的一个方法,反倒让你纠结了,呵呵
zhangrongchao_ 2014-12-14
  • 打赏
  • 举报
回复
并没有输出 该职务不存在' ,说明没有进入异常,这是为什么?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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