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所允许的范围之内。
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所允许的范围之内。