为了账号安全,请及时绑定邮箱和手机立即绑定

如果无数据抛出异常,如果有数据打印数据,我给10号部门,为什么还是会抛出自定义的例外呢

set SERVEROUTPUT ON;

declare

 no_data exception;

 cursor cur_emp(dno number) is select ename from emp where DEPTNO=dno;

 pname emp.ename%type;

begin

 open cur_emp(10);

  loop

   fetch cur_emp into pname;

   if cur_emp%found then

   dbms_output.put_line(pname);

   elsif cur_emp%notfound then

   raise no_data;

   end if;

  end loop;

 close cur_emp;

 exception 

 when no_data then dbms_output.put_line('没有部门为50号的员工信息');

 when others then dbms_output.put_line('其他例外');

end;

/


正在回答

3 回答

begin

 open cur_emp(10);

  loop

   fetch cur_emp into pname;

   if cur_emp%found then

   dbms_output.put_line(pname);

   【elsif cur_emp%notfound then  --语句cur_emp%notfound总会循环到最后的,所以不适合用来引出异常,用下面的条件可以执行

   ELSIF PNAME IS NULL THEN--替换此条件可以解决】

   raise no_data;

   end if;

   【exit when cur_emp%notfound;--缺少loop循环退出条件】

  end loop;

 close cur_emp;

 exception 

 when no_data then dbms_output.put_line('没有部门为50号的员工信息');

 when others then dbms_output.put_line('其他例外');

end;


0 回复 有任何疑惑可以回复我~

代码执行到最后肯定会没数据的,所以自定义的异常时最后执行的。

1 回复 有任何疑惑可以回复我~

 fetch cur_emp into pname;

   if cur_emp%found then

   dbms_output.put_line(pname);

   elsif cur_emp%notfound then

   raise no_data;   

好奇怪不理解加粗黑色你为何这么定义。 你这个循环为什么没有循环终止语句呢


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

如果无数据抛出异常,如果有数据打印数据,我给10号部门,为什么还是会抛出自定义的例外呢

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信