Oracle提供了sequence對象由系統提供自增長的序列號通常用於生成數據庫數據記錄的自增長主鍵或序號的地方
下面介紹一下關於sequence 的生成修改刪除等常用的操作:
創建 Sequence
使用如下命令新建sequence(用戶需要有CREATE SEQUENCE 或者CREATE ANY SEQUENCE權限):
CREATE SEQUENCE test_sequence INCREMENT BY 每次加的個數據 START WITH 從開始計數 NOMAXVALUE 不設置最大值 NOCYCLE 一直累加不循環 CACHE ; [注意] 如果設置了CACHE值ORACLE將在內存裡預先放置一些sequence以使存取速度更快cache裡面的取完後oracle自動再取一組到cache 但是使用cache可能會跳號 當遇到數據庫突然異常down掉(shutdown abort)cache中的sequence就會丟失 因此推薦在create sequence的時候使用 nocache 選項
使用 sequence:
sequenceCURRVAL 返回 sequence的當前值 sequenceNEXTVAL 增加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 SEQNAMENEXTVAL FROM USER_SEQUENCES 得到下一位游標的值
修改 Sequence
用戶必須擁有ALTER ANY SEQUENCE 權限才能修改sequence 可以alter除start至以外的所有sequence參數 如果想要改變start值必須 drop sequence 再 recreate
命令格式如下
ALTER SEQUENCE test_sequence INCREMENT BY MAXVALUE CYCLE 到後從頭開始 NOCACHE ;
刪除 Sequence DROP SEQUENCE order_seq;
From:http://tw.wingwit.com/Article/program/Oracle/201311/17614.html