我正在使用Spring运行Java应用程序,我的一个插入语句出错了。我的错误是:
嵌套异常是java.sql.SQLIntegrityConstraintViolationException: ORA-01400:无法插入NULL(“MY_SCHEMA”。“VALIDATION_RESULT”。“RESULT_SEQ”)
对于所有数据库人员,Oracle是否会从null
调用中返回nextval
?如果多个线程同时调用它呢?
对于任何Spring开发人员,我们都在使用
org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer
处理序列。我们使用nextLongValue
方法。
我的直言告诉我甲骨文没有给我一个空nextval
。从我已经搜索过的所有内容来看,这似乎是不可能的。任何人都可以确认吗?
答案 0 :(得分:2)
确认。它们不返回NULL。您收到错误消息。
Oracle序列实际上会生成一个“nextval”对象块,因此线程可以快速访问它们。如果是性能障碍,您可以更改序列以创建更大的预读数值。唯一的可能性是Oracle严重受损。让您的DBA查看警报日志。 ORA-06nn错误之类的错误是DBA的噩梦,也是我所知道的唯一真正打破像序列这样的对象的东西。 在这种情况下,DB和DBA也可能接近DOA。这种事情发生在职业生涯中。
我会先怀疑你的代码。或者有人在跟踪序列 - 就像用ALTER SEQUENCE做一些蠢事。即,从一个重新启动序列并破坏表约束。当您仅从数据库DEV中导出表时,也很容易按顺序搞定事情 - >导入到数据库TEST,因为其他元数据也需要被带来。