在Oracle中sequence就是序號,每次提取完都會自動增加,步幅固定,它與表沒有直接關係!
首先查詢當前數據庫中的sequence
查詢當前用戶的:select
*
from
user_sequences
查詢所有用戶的:select
*
from
all_sequences
開始創建sequence:
創建sequence語句:
CREATE SEQUENCE seq_name
-- seq_name爲計數器的名字,自定;
INCREMENT BY 1
-- 每次加幅度:1,2,3,....;
START WITH 1
-- 起始序號,以實際生產情況而定;
NOMAXvalue
-- 不設置最大值,或設定最大值: maxvalue 9999;
NOCYCLE
-- 一直累加,不循環; 或循環使用 cycle ;
CACHE 10
--設置緩存序列個數,如果系統down掉了或者其它情況將會導致序列不連續,也可以設置爲---------NOCACHE
修改sequence:
Alter sequence 可以修改sequence(除起始值)步幅、最大/最小值、是否循環、緩存個數 這些參數;
例:Alter Sequence seq_name
Increment By 2
Maxvalue 9999
使用sequence:
sequence創建完成後,就可以使用sequence的兩個參數 currval、nextval;
currval查詢sequence的當前值:select seq_name.currval from dual;
next
val查詢sequence下一個值:select seq_name.nextval from dual;
刪除sequence:
drop sequence
seq_name;
注:
1、currval是取當前值,所以一個新的計數器sequence必須先使用nextval後纔可以使用currval否則會報錯;
2、nextval是取下一個值,但第一次使用時取的是初始值,之後正常取下一個,且如果一個語句(不同的子句)裏面有多個nextval,它們的取值可能是不同的;
3、如果指定CACHE值,ORACLE就可以預先在內存裏面放置一些sequence,cache裏面的取完後,oracle自動再取一組到cache。 。
優點:存取的快些,尤其是併發訪問時。
缺點:使用cache或許會跳號, 比如數據庫突然不正常down掉(shutdown abort),cache中的sequence就會丟失. 所以可以在創建的時候用nocache防止這種情況