create or replace procedure usp_getEmpByDept( in_deptNo in number, out_curEmp out pkg_const.REF_CURSOR ) as begin open curEmp for select empno, ename from scott.emp where deptno = in_deptNo;
在PLSQL中,你可以通过两个内建的函数sqlcode 和sqlerrm 来找出发生了哪类错误并且获得具体的message信息,在内部违例发生时,sqlcode返回从-1至-20000之间的一个错误号,但有一个例外,仅当内部违例no_data_found 发生时,才会返回一个正数 100。当用户自定义的违例发生时,sqlcode返回+1,除非用户使用 pragma EXCEPTION_INIT 将自定义违例绑定一个自定义的错误号。当没有任何违例抛出时,sqlcode返回0。下面是一个简单的捕捉违例的例子:declare i number(3); begin select 100/0 into i from dual;
exception when zero_divide then ... end;在上面的exception 中我们使用others 要害字捕捉所有未明确指定的违例,并进行记录log处理,同时我们必须在做完这些处理之后,把违例再次抛出给调用程序,调用函数: raise_application_error(),此函数向调用程序返回一个用户自定义的错误号码和错误信息,第一个参数指定一个错误号码,由用户自行定义,但必须限定在-20000至-20999之间,避免与Oracle内部定义exception的错误号码冲突,第二个参数需要返回一个字符串,这里我们使用它返回我们上面捕捉的错误号码和错误描述。注重:通过raise_application_error()函数抛出的违例已经不是开始在程序块内部捕捉的内部违例,而是由用户自己定义的。