我們大家都知道Oracle數據庫中沒有關於自增類型的相關字段,所以我們在通常情況下是需要定義一個關於Oracle sequence的來作為其自動增長的類型字段的相關數據。於是記錄了一些關於Oracle sequence的資料,已備查用!
Oracle中的序列(sequence)
1: 如何定義一個序列
僅向前的數字變量(和SQL中的自動編號有點像 identity(1,2) )
格式:
create sequence <序列名稱>
start with <起始數>
increment by <增長量>
[maxvalue 值]
[minvalue 值]
[cycle 當到達最大值的時候,將繼續從頭開始]
[Nocycle -- 一直累加,不循環]
[Cache ]
注意:
第一次NEXTVAL返回的是初始值;隨後的NEXTVAL會自動增加你定義的INCREMENT BY值,然後返回增加後的值。CURRVAL 總是返回當前Oracle SEQUENCE的值,但是在第一次NEXTVAL初始化之後才能使用CURRVAL,否則會出錯。一次NEXTVAL會增加一次SEQUENCE的值。
如果指定CACHE值,Oracle就可以預先在內存裡面放置一些sequence,這樣存取的快些。cache裡面的取完後,Oracle自動再取一組到cache。 使用cache或許會跳號, 比如數據庫突然不正常down掉(shutdown abort),cache中的Oracle sequence就會丟失. 所以可以在create sequence的時候用nocache防止這種情況。
- example:
- create sequence mySeq
- start with 1
- increment by 2
- maxvalue 40
- minvalue 1
- cycle
2:怎麼去取序列數據:
- currval--->curenvalue
- nextVal-->NextVlaue
- example:
- select mySeq.nextVal from dual
注意一點:currval只有當nextVal執行一次以後才可以用.
在創建表的時候,可以使用序列.
具體例子:
create table 公司基本信息表
- (
- ComPID int,
- CompName varchar2(20)
- )
insert into 公司基本信息表 values(mySeq.nextVal,'AA')