问答详情
源自:4-6 自定义例外

如果无数据抛出异常,如果有数据打印数据,我给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;

/


提问者:zdhan588 2016-01-06 16:08

个回答

  • 慕村5234862
    2018-07-26 21:38:11

    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;


  • qq_我只想静静_0
    2016-09-11 11:10:28

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

  • 22不小了
    2016-01-07 13:28:13

     fetch cur_emp into pname;

       if cur_emp%found then

       dbms_output.put_line(pname);

       elsif cur_emp%notfound then

       raise no_data;   

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