区分SQLExceptions - Oracle的错误代码列表?

时间:2015-12-10 11:01:58

标签: java oracle exception

我们的应用程序基于Java,JPA和Oracle数据库。如果数据库操作失败,我会获得SQLException或其中一个派生。

在我的情况下,我想区分SQLIntegrityConstraintViolationException是否由唯一或外键约束的问题引起。

日志显示唯一约束违规的错误代码ORA-00001,但是,我正在寻找其他代码的列表,以便重新访问正确的代码。

我知道这些代码是特定于供应商的,因此很容易找到answer for MySQL。对于Oracle,我需要相同的东西。

2 个答案:

答案 0 :(得分:1)

毫不奇怪,OracleDOcumentation中有一个列表:

http://docs.oracle.com/cd/B28359_01/server.111/b28278/toc.htm

但是从顶部挖掘它也不是那么容易找到的。由于MySql-Answers更容易找到,我希望,这个Q& A可以提供同样快捷的信息。

不幸的是,一个人不能轻易地在列表中搜索,因为它已经分布在多个页面上,而没有很多指示哪个范围包含哪种错误。

但是,我设法找到了我的具体问题的代码:UQ违规是ORA-00001,其中外键错误发现在ORA-02290(缺少父级)和ORA-02291(尝试删除存在依赖子级) )。

答案 1 :(得分:1)

这个问题可能更广泛。错误处理是特定于供应商的,JDBC不处理供应商特定的东西。

例如,JBOSS中有一个名为:ExceptionSorter的类,请参阅OracleExceptionSorter。此类列出了描述错误在“连接级别”的情况的所有严重错误代码。因此必须关闭连接,并且(在一段时间之后)必须创建一个新连接。

然后“交易级别”出现错误。显然它是一个死锁“ORA-0060”,然后由并发的“MERGE”语句返回一些疯狂的错误。这些错误通常可以通过回滚重新尝试整个事务来解决。

其余错误通常与数据完整性有关,而且无法重新尝试。

我不知道任何异常排序实现,它涵盖了所有类错误。也许它甚至不可能实现,因为它可能取决于应用程序的需求。