我们的应用程序基于Java,JPA和Oracle数据库。如果数据库操作失败,我会获得SQLException
或其中一个派生。
在我的情况下,我想区分SQLIntegrityConstraintViolationException
是否由唯一或外键约束的问题引起。
日志显示唯一约束违规的错误代码ORA-00001
,但是,我正在寻找其他代码的列表,以便重新访问正确的代码。
我知道这些代码是特定于供应商的,因此很容易找到answer for MySQL。对于Oracle,我需要相同的东西。
答案 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”语句返回一些疯狂的错误。这些错误通常可以通过回滚重新尝试整个事务来解决。
其余错误通常与数据完整性有关,而且无法重新尝试。
我不知道任何异常排序实现,它涵盖了所有类错误。也许它甚至不可能实现,因为它可能取决于应用程序的需求。