Java Oracle序列是否可以为空?
我正在用Spring运行一个Java应用程序,其中一条insert语句出现错误。我的错误是: 嵌套异常为java.sql.SQLIntegrityConstraintViolationException: ORA-01400:无法将NULL插入(“我的模式”“验证结果”“结果顺序”) 对于所有的数据库人员来说,是否存在Oracle从Java Oracle序列是否可以为空?,java,sql,spring,oracle,sequence-generators,Java,Sql,Spring,Oracle,Sequence Generators,我正在用Spring运行一个Java应用程序,其中一条insert语句出现错误。我的错误是: 嵌套异常为java.sql.SQLIntegrityConstraintViolationException: ORA-01400:无法将NULL插入(“我的模式”“验证结果”“结果顺序”) 对于所有的数据库人员来说,是否存在Oracle从nextval调用返回null的场景?如果多个线程同时调用它呢 对于任何Spring开发人员,我们都使用 org.springframework.jdbc.suppo
nextval
调用返回null
的场景?如果多个线程同时调用它呢
对于任何Spring开发人员,我们都使用
org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer
来处理这个序列。我们使用nextLongValue
方法
我的直觉告诉我Oracle不会给我一个空的
nextval
。从我已经寻找的一切来看,这似乎是不可能的。有人能确认吗?已确认。它们不返回NULL。您将收到一条错误消息
Oracle序列实际上生成了一块“nextval”对象,因此线程可以快速访问它们。如果存在性能障碍,可以更改序列以创建更大数量的预读值。唯一的可能性是如果甲骨文严重破产。让您的DBA查看警报日志。像ORA-06nn这样的错误是DBA的噩梦,而且是我所知道的唯一一个真正破坏像序列这样的对象的错误。
在这种情况下,DB和DBA可能也接近DOA。这种事一生只发生一次
我会先怀疑你的密码。或者有人在修改序列——比如在修改序列时做一些愚蠢的事情。i、 例如,从一个开始重新启动序列并打破表约束。当您仅从database DEV->import to database TEST导出表时,也很容易按顺序将事情搞砸,因为还需要引入其他元数据。感谢您的响应。alter序列不是一个选项,因为我知道代码不使用它,即使我们尝试了,我们的用户也没有权限。我在最初的帖子中没有包含这一点,但代码有时确实有效。我无法找出根本原因,但它看起来确实与代码有关。我会让我的DBA查看日志并进行检查。谢谢