日期:2014-05-16  浏览次数:20492 次

ORACLE 用户自定义异常
1CREATE OR REPLACE PROCEDURE test_Exception_byLeejin
2(
3  ParameterA IN varchar2,
4  ParameterB IN varchar2,
5  ErrorCode  OUT varchar2  --返回值,错误编码
6)
7AS
8  /*以下是一些变量的定义*/
9  V1    NUMBER;
10  V2    nvarchar2(20);
11  V3    NUMBER;   
12  APP_EXP  EXCEPTION;  --自定义异常
13BEGIN
14  ErrorCode :='';
15  IF (ParameterA=ParameterB) THEN
16     ErrorCode := 'ParameterA = ParameterB';
17     RAISE APP_EXP;     -- 抛出异常
18  END IF;
19EXCEPTION
20  WHEN APP_EXP THEN     --在处理异常
21    RAISE_APPLICATION_ERROR(-20001,ErrorCode);
22  WHEN OTHERS THEN
23      RAISE_APPLICATION_ERROR(-20001,'未知异常');
24  END;

如果需要放回message 并中断程序继续进行,则可以使用:

RAISE_APPLICATION_ERROR(-20001,ErrorCode);

这样,就在Java端可以通过SQLException来捕获异常。

虽然通过SQLException.getMessage()可以捕获到异常的内容,但是这些内容对于开发比较有用。对于客户来说,并不友好,也没有多大意义。     通过SQLException.getErrorCode()可以捕获到自定义的异常错误编号。然后就可以,通过这个错误编号,自定义相应的Message内容,返回给客户了。

注意:oracle允许自定义的错误代码的范围为-20000 -- -20999

在使用过程中,遇到了下面的问题。
     ORA-21000: error number argument to raise_application_error of [xxxx] is out of range出现这个错误的原因是:在存储过程中定义的错误代码Number不在Oracle所允许的范围之内。