簡體   English   中英

為什么將oracle序列設置為增加1時,它會跳2?

[英]why is oracle sequence jumping by 2 when it is set to increment by 1?

所以這讓我感到困惑。.因此我在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中)我在做什么錯? 救命! :(

好吧..這太奇怪了..我剛剛意識到,每當執行select test_seq.nextval時,它都會增加我的價值? 我的數據庫上確實有一個觸發器。 那是什么原因造成的? 抱歉,我是Oracle / pl / sql的新手。

謝謝你的幫助。

您可能會濫用NEXTVAL 通過使用序列 (重點是我):

在SQL語句中使用NEXTVALCURRVAL偽列引用了一個序列。 每個新序列號都是通過引用序列偽列NEXTVAL ,而當前序列號可以使用偽列CURRVAL 重復引用

問題是您的RDBMS還是您的應用程序代碼。 前者可以輕松檢查。

  1. 創建序列;
  2. 使用“ SELECT .CURRVAL,.NEXTVAL FROM DUAL;” 語句檢查它是否真的增加了2。如果增加了1,則您的RDBMS很好,問題出在您的應用程序代碼上。 該序列在不希望或您不知道的某個地方被解雇。

要在應用程序端進行檢查,您將需要檢查應用程序中使用此順序的所有位置。 也可以使用DBA_SOURCE視圖輕松檢查該視圖,該視圖具有與ALL_SOURCE視圖相同的列。 檢查此鏈接

祝好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM