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;
/
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;
代码执行到最后肯定会没数据的,所以自定义的异常时最后执行的。
fetch cur_emp into pname;
if cur_emp%found then
dbms_output.put_line(pname);
elsif cur_emp%notfound then
raise no_data;
好奇怪不理解加粗黑色你为何这么定义。 你这个循环为什么没有循环终止语句呢