【问题标题】:SQLIntegrityConstraintViolationExceptionSQLIntegrityConstraintViolationException
【发布时间】:2019-01-20 09:37:08
【问题描述】:

我有这个代码:

try {
   insertRowInDatabase();
} catch(SQLIntegrityConstraintViolationException e) {
  //row already inserted. Do nothing.
} catch(Exception other) {
  //we should retry to insert row
  retry();  
} 

是否有可能,将行插入 oracle 数据库会引发 SQLIntegrityConstraintViolationException,但数据库中毕竟不存在该行。

【问题讨论】:

  • 我有一个带有主键约束的表。不存在触发器或外键。
  • 我的问题更多是关于Oracle数据库默认提供的一致性和隔离级别。与触发器和外键无关。

标签: java sql jdbc oracle11g


【解决方案1】:

有可能吗?当然。如果有一个外键约束,或者表上有一个自定义触发器会阻止插入怎么办?没有架构就很难分辨。

【讨论】:

  • 对不起。我必须在我的问题中考虑架构。
【解决方案2】:

据我了解,您需要 PL/SQL 的 MERGE,它类似于 mysql 的 ON DUPLICATE KEY UPDATE...

你可以看MERGE例子here

【讨论】:

  • 合并不是 oracle 的原子操作。所以约束违反异常仍然可能
猜你喜欢
  • 2013-05-18
  • 2020-09-12
  • 2015-12-01
  • 2021-05-14
  • 2019-05-30
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多