【问题标题】:why is oracle sequence jumping by 2 when it is set to increment by 1?为什么oracle序列设置为递增1时会跳转2?
【发布时间】:2016-10-02 07:37:39
【问题描述】:

所以这让我感到困惑..所以我在我的 JPA 代码中得到了这个语法:(我按照说明进行操作并且语法是正确的)

 @SequenceGenerator(name="oracle_gen", sequenceName="TEST_SEQ", allocationSize=1)
 @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="oracle_gen")

我在 Oracle 10 中获得了一个名为“TEST_SEQ”的序列,该序列设置为递增 1

它现在可以工作了.. 但是当它插入我的行时,ID 列(序列设置为)增加了 2.. 比如 17、19、21 等。

当我从 oracle 的 dual 中选择 test_seq.nextval 时,它目前显示为 22,但我知道如果我从我的 java 应用程序中添加另一行,它将是 23.. 我不知道为什么以及它在哪里添加另一个 1. 序列已设置为 NOCACHE(在 Oracle 中).. 我做错了什么?帮助! :(

好吧..这太奇怪了..我刚刚意识到每当我选择 test_seq.nextval 时,它会不断增加我的价值?!我确实在数据库上有一个触发器。这是造成它的原因吗?抱歉,我是 Oracle/pl/sql 的新手。

感谢您的帮助。

【问题讨论】:

  • 触发器有什么作用?请将您的问题更新为触发代码。另外,在插入/更新可能还包含序列调用的数据时,是否使用了任何函数?

标签: php sql oracle symfony oracle11g


【解决方案1】:

您可能误用了NEXTVAL。来自Using Sequences(强调我的):

在 SQL 语句中使用 NEXTVAL 和 CURRVAL 伪列引用序列;每个新的序列号都是通过引用序列伪列NEXTVAL生成的,而当前的序列号可以被重复引用 使用伪列CURRVAL。

【讨论】:

    【解决方案2】:

    问题出在您的 RDBMS 或您的应用程序代码上。前者很容易检查。

    1. 创建序列;
    2. 使用“SELECT .CURRVAL, .NEXTVAL FROM DUAL;”检查它是否真的增加 2 的语句。如果它增加 1,那么您的 RDBMS 很好,问题出在您的应用程序代码上。序列在某个非预期或您不知道的地方被触发。

    要检查应用程序端,您需要检查应用程序中使用此序列的所有位置。这也可以使用与 ALL_SOURCE 视图具有相同列的 DBA_SOURCE 视图轻松检查。检查这个link。

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 2012-08-16
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多