2013-10-16 67 views
1

首先,我跑所有這些與JDBC驅動程序的Java ...如何僅將序列增加1?

在這裏,我定義一個表:

create table HistoryCCP(
    ID  NUMBER(6)  NOT NULL, 
    SCRIPT VARCHAR2(1000) NOT NULL 
) 

這裏我定義了一個序列:

CREATE SEQUENCE SYSTEM.HistoryId 
    MINVALUE 1 
    MAXVALUE 1000000 
    INCREMENT BY 1 
    START WITH 1 
    NOORDER 
    NOCYCLE 

現在我插入到表通過這裏使用這樣的:每當我關閉程序並運行它再次

insert into HistoryCCP 
    values (SYSTEM.HistoryId.nextval ,'HELLOOOO ') 

試着插入,它會增加10! 當我定義像這樣的序列:

CREATE SEQUENCE SYSTEM.HistoryId 
    MINVALUE 1 
    MAXVALUE 1000000 
    INCREMENT BY 1 
    START WITH 1 
    CACHE 100  -- added cache parameter 
    NOORDER 
    NOCYCLE 

它增加了100! 你知道它爲什麼像這樣以及如何增加1?

+1

因爲你說「緩存100個值」,然後丟棄它們。 –

回答

6

決不依靠無間隙編號序列。

緩存值是在內存數據庫服務器舉辦避免需要不斷更新它與最近使用的內部價值$序列表序列值的數量。如果你減少了緩存值,那麼你增加了必須修改$ SEQ表的速率,這會降低系統速度。

緩存值可以被老化,並失去了對系統重新啓動時,如果交易被回滾值不被重用。

差距的存在不應該成爲你的一個問題 - 如果是,那麼你就需要使用其他的東西比序列來生成的數字,這樣做將連載插入到該表。

0

NOCACHE的工作,但也將是下的原因有很多個壞主意,總共廢話,如果你打算把你的應用程序上的Oracle RAC。

甲骨文序列對於(內部)的唯一ID,而不是用於通過施加的要求嚴格漸進數。舉例來說,假設使用序列來生成經典的「協議號碼」是許多財務會計軟件的常見缺陷:開始時看起來很容易,但當項目發展時它很容易被殺死。