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()函數拋出的違例已經不是開始在程序塊內部捕捉的內部違例,而是由用戶自己定義的。