Oracle数据库——PL/SQL程序设计(例外)

例外是程序设计语言提供的一种功能,用来增强程序的健壮性和容错性。

Oracle中的例外

1、系统例外

(1)Timeout_on_resource(在等待资源时发生超时)

Oracle数据库——PL/SQL程序设计(例外)_第1张图片

(2)No_data_found (没有找到数据)

--系统例外: no data found
set serveroutput on
declare
	pename emp.ename%type;
begin
	--查询员工号是1234的员工姓名
	select ename into pename from emp where empno = 1234;
	exception
		when no_data_found then dbms_output.put_line( '没有找到该员工') ;
		when others then dbms_output.put_line( '其他例外');
end;
/

Oracle数据库——PL/SQL程序设计(例外)_第2张图片

(3)Too_many_rows (select …into语句匹配多个行)

--系统例外: too many_ rows
set serveroutput on
declare
	pename emp.ename%type;
begin
	--查询所有10号部门的员工姓名
	select ename into pename from emp where deptno = 10;
	exception
		when too_many_rows then dbms_output.put_line( 'select into 匹配了多行') ;
		when others then dbms_output.put_line( '其他例外');
end;
/

Oracle数据库——PL/SQL程序设计(例外)_第3张图片

(4)Zero_Divide (被零除)

--系统例外:被零除zero_ divide
set serveroutput on
declare
	--定义一个基本变量
	pnum number;
begin
	pnum := 1/0;
	exception
		when zero_divide then dbms_output.put_line('l: 0不能做除数');
							  dbms_output.put_line('2: 0不能做除数');
		when others then dbms_output.put_line( '其他例外') ;
end;
/

Oracle数据库——PL/SQL程序设计(例外)_第4张图片

(5)Value_error (算术或转换错误)

--系统例外: value error
set serveroutput on
declare
	--定义一个基本变量
	pnum number;
begin
	pnum := 'abc';
	exception
		when value_error then dbms_output.put_line('算术或者转换错误'); 
		when others then dbms_output.put_line('其他例外');
end;
/

Oracle数据库——PL/SQL程序设计(例外)_第5张图片

2、自定义例外

定义变量,类型是exception

使用raise抛出自定义例外

--自定义例外:查询50号部门的员工姓名
set serveroutput on
declare
	--定义光标,代表50号部门的员工姓名
	cursor cemp is select ename from emp where deptno = 50;
	pename emp.ename%type;
	no_emp_found exception;
begin
	open cemp;
	fetch cemp into pename;
	if cemp%notfound then
		raise no_emp_found;
	end if ;
close cemp;
exception
	when no_emp_found then dbms_output.put_line('没有找到员工');
	when others then dbms_output.put_line('其他例外');
end;
/

Oracle数据库——PL/SQL程序设计(例外)_第6张图片

你可能感兴趣的:(Oracle)