orcale 中的例外我们可以看作是其他编程语言中的异常,是为了增强语言的健壮性和容错性。
在orcale中常见的有以下几种:
自定义例外
可以在声明的时候定义一个例外如下:
no_emp_found exception;
在有可能发生异常的地方使用 raise 将异常进行抛出
raise no_emp_found;
最后我们只需要对异常进行处理就行了
例子 查询 orcale 自带表emp 中 50 号部门的员工,我们知道50号部门是没有员工的。
--自定义例外没有查找到的例外no_emp_found declare cursor c_emp is select ename from emp where deptno=50; p_ename emp.ename%type; --定义一个例外 no_emp_found exception; begin open c_emp; --获取一条记录 fetch c_emp into p_ename; --如果没有查到则抛出自定义例外 if c_emp%notfound then raise no_emp_found; end if; close c_emp; --捕获例外 exception when no_emp_found then dbms_output.put_line(‘没有该部门下的员工‘); when others then dbms_output.put_line(‘其他例外‘); end; /
这里有一个问题:我们知道无法查询到50号部门的员工所以会提前的抛出异常,那么这个游标就没有办法关闭了,事实是这样的吗?其实这个游标还是会关闭的啊。在 orcale 中会自行的启动一个叫pmon(process monitor) 的进程,该进程的目的就是对pl/sql中的资源进行监控,如果发现存在没有关闭的资源会对其进行关闭操作。所以我们无需关心资源没有关闭的问题,但是提醒大家还是最好手动的对资源进行关闭的操作。
原文:http://www.cnblogs.com/brother-four/p/6551335.html