Oracle中SEQUENCES的使用

Oracle提供了sequence對象,由系統提供自增長的序列號,通常用於生成數據庫數據記錄的自增長主鍵或序號的地方.
  下面介紹一下關於sequence 的生成,修改,刪除等常用的操作:
 1. 創建 Sequence 使用如下命令新建sequence(用戶需要有CREATE SEQUENCE 或者CREATE ANY SEQUENCE權限): 
CREATE SEQUENCE test_sequence 
INCREMENT BY 1   -- 每次加的個數據 
START WITH 1    -- 從1開始計數 
NOMAXVALUE    -- 不設置最大值 
NOCYCLE      -- 一直累加,不循環 
CACHE 10 ; [注意] 如果設置了CACHE值,ORACLE將在內存裏預先放置一些sequence,以使存取速度更快。cache裏面的取完後,oracle自動再取一組到cache。
但是,使用cache可能會跳號, 當遇到數據庫突然異常down掉(shutdown abort),cache中的sequence就會丟失. 因此,推薦在create sequence的時候
使用 nocache 選項。
 2. 使用 sequence:
 sequence.CURRVAL -- 返回 sequence的當前值 
sequence.NEXTVAL -- 增加sequence的值,然後返回 sequence 值 
[注意] 第一次NEXTVAL返回的是初始值;隨後的NEXTVAL會自動增加你定義的INCREMENT BY值,然後返回增加後的值。 
CURRVAL 總是返回當前SEQUENCE的值,但是在第一次NEXTVAL初始化之後才能使用CURRVAL,否則會出錯。
一次NEXTVAL會增加一次 SEQUENCE的值,所以如果你在同一個語句裏面使用多個NEXTVAL,其值就是不一樣的。 
sequence 存儲在數據字典中,存儲於user_sequences表 LAST_NUMBER 爲最終序列號,也就是sequence遊標當前所在的位置。
 //get sequence last_number SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME=TEST_SEQNAME 
// NEXTVAL 使遊標指向下一位(增一或減一) SELECT SEQNAME.NEXTVAL FROM USER_SEQUENCES 得到下一位遊標的值
 3. 修改 Sequence 用戶必須擁有ALTER ANY SEQUENCE 權限才能修改sequence.
 可以alter除start至以外的所有sequence參數. 如果想要改變start值,必須 drop sequence 再 re-create.
 命令格式如下: ALTER SEQUENCE test_sequence 
INCREMENT BY 10
 MAXVALUE 10000 
CYCLE    -- 到10000後從頭開始
 NOCACHE ; 
4. 刪除 Sequence DROP SEQUENCE order_seq;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章