Oracle序列

llnnmc發表於2017-07-11


一、序列的建立


create sequence [schema.]sequencename

[increment by number]

[start with number]

[maxvalue number | nomaxvalue]

[minvalue number | nominvalue]

[cycle | nocycle]

[cache number | nocache]

[order | noorder]


increment by:遞增數,預設為1

start with:起始值,預設為1

maxvalue:最大值,預設無最大值。

minvalue:最小值,預設無最小值。

cycle/nocycle:序列到達最大或最小值後的行為,預設丟擲錯誤,如果為cycle,則會返回起點並重復(注意返回的起點不是start with設定的值,而是從1開始)。

cache/nocache:預設cache20

order/noorder:用於叢集環境,讓各個例項協同產生序列。


二、序列的產生


利用偽列產生序列

nextval:針對全域性產生的下一個值,每個會話必須先有nextval,才能有currval

select s.nextval from dual;


currval:傳送給當前會話的上一個值,並不是序列發出的上一個值,這樣每個會話才能呼叫自己的currval值,因為這是它自己上次發出的。

select s.currval from dual;


如資料庫被重啟,斷電等,快取中的序列會丟失,導致序列出現間隔。

序列是全域性共享的,不同的會話也將導致可能產生序列間隔。

序列產生後不能回滾。


三、序列的查詢


檢視使用者的序列物件資訊

col sequence_name for a20

select  * from user_sequences;


SEQUENCE_NAME         MIN_VALUE  MAX_VALUE INCREMENT_BY CYCLE_FLAG ORDER_FLAG CACHE_SIZE LAST_NUMBER

-------------------- ---------- ---------- ------------ ---------- ---------- ---------- -----------

S                             1       1E28            1 N          N                  20          21


last_number就是下一個要建立的值,不包括快取中已建立的序列。


四、序列的修改


使用alter sequence命令修改序列

alter sequence s increment by 20;


不能修改起點start with,修改不影響已經存在的序列,隻影響後續序列。


預設為20cache數量可能不夠而影響效能,可以考慮增大

alter sequence s cache 100;


五、序列的刪除


使用drop sequence命令刪除序列

drop sequence s;


如果序列號要重置起點,只能刪除重建。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28974745/viewspace-2141892/,如需轉載,請註明出處,否則將追究法律責任。

相關文章