日期:2014-05-16 浏览次数:20484 次
数据库异常抛出
Caused by: java.sql.SQLException: ORA-02291: 违反完整约束条件 (xxx.FK_yyyy) - 未找到父项关键字
?
如何自定义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.删除该节点
?
如果用自定义异常则可以创建如下代码
?
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; }?
?
?
?