作者:雪中侠客79_932 | 来源:互联网 | 2014-07-08 01:11
自定义oracle抛出异常解决数据库异常抛出Causedby:java.sql.SQLException:ORA-02291:违反完整约束条件(xxx.FK_yyyy)-未找到父项关键字www.2cto.com如何自定义oracle抛出的异常?使用RAISE_A...Syntax
自定义oracle抛出异常解决
Caused by: java.sql.SQLException: ORA-02291: 违反完整约束条件 (xxx.FK_yyyy) - 未找到父项关键字 www.2cto.com
如何自定义oracle 抛出的异常?
使用RAISE_APPLICATION_ERROR 函数
该函数是将应用程序专有的错误从服务器端转达到客户端应用程序(其他机器上的SQLPLUS或者前台开发语言)
如何使用
RAISE_APPLICATION_ERROR( error_num IN NUMBER, error_msg IN VARCHAR2);
error_num :错误码,-20000到-20999 之间,这样就不会与ORACLE已有的的错误代码发生冲突。
error_msg :错误信息, 的长度不能超过 2k,否则截取 2k。
举例说明:要删除树形结构的某个节点
java程序 1.判断该节点状态是否能够被删除
2.判断该节点下面是否有子节点,如果有不能删除
3.删除该节点
如果用自定义异常则可以创建如下代码
Sql代码
declare
row_count int;
begin
select count(*) into row_count from tree_table where parent_id = '0001' ;
if (row_count > 0) then
RAISE_APPLICATION_ERROR(-20001, '该节点有子节点,不能被删除。');
end if;
select count(*) into row_count from tree_table where id = '0001' and status > 1 ;
if (row_count > 0) then
RAISE_APPLICATION_ERROR(-20002, '该节点已被确认,不能被删除。');
end if;
delete from tree_table where id = '0001';
end;
然后程序调用
try{
....jdbc调用上面得语句(替换'0001'为传入的节点id).....
}catch(Exception e) {
String error = "";
if (e instanceof InvocationTargetException) {
Throwable targetEx = ((InvocationTargetException) e).getTargetException();
error = targetEx.getMessage();
} else {
error = e.getMessage();
}
return error;
}