Oracle sequence序列的正確用法
我們大家都知道Oracle數(shù)據(jù)庫(kù)中沒(méi)有關(guān)于自增類型的相關(guān)字段,所以我們?cè)谕ǔG闆r下是需要定義一個(gè)關(guān)于Oracle sequence的來(lái)作為其自動(dòng)增長(zhǎng)的類型字段的相關(guān)數(shù)據(jù)。于是記錄了一些關(guān)于Oracle sequence的資料,已備查用!
Oracle中的序列(sequence)
1: 如何定義一個(gè)序列
僅向前的數(shù)字變量(和SQL中的自動(dòng)編號(hào)有點(diǎn)像 identity(1,2) )
格式:
create sequence <序列名稱>
start with <起始數(shù)>
increment by <增長(zhǎng)量>
[maxvalue 值]
[minvalue 值]
[cycle 當(dāng)?shù)竭_(dá)***值的時(shí)候,將繼續(xù)從頭開(kāi)始]
[Nocycle -- 一直累加,不循環(huán)]
[Cache ]
注意:
***次NEXTVAL返回的是初始值;隨后的NEXTVAL會(huì)自動(dòng)增加你定義的INCREMENT BY值,然后返回增加后的值。CURRVAL 總是返回當(dāng)前Oracle SEQUENCE的值,但是在***次NEXTVAL初始化之后才能使用CURRVAL,否則會(huì)出錯(cuò)。一次NEXTVAL會(huì)增加一次SEQUENCE的值。
如果指定CACHE值,Oracle就可以預(yù)先在內(nèi)存里面放置一些sequence,這樣存取的快些。cache里面的取完后,Oracle自動(dòng)再取一組到cache。 使用cache或許會(huì)跳號(hào), 比如數(shù)據(jù)庫(kù)突然不正常down掉(shutdown abort),cache中的Oracle sequence就會(huì)丟失. 所以可以在create sequence的時(shí)候用nocache防止這種情況。
- example:
- create sequence mySeq
- start with 1
- increment by 2
- maxvalue 40
- minvalue 1
- cycle
2:怎么去取序列數(shù)據(jù):
- currval--->curenvalue
- nextVal-->NextVlaue
- example:
- select mySeq.nextVal from dual
注意一點(diǎn):currval只有當(dāng)nextVal執(zhí)行一次以后才可以用.
在創(chuàng)建表的時(shí)候,可以使用序列.
具體例子:
create table 公司基本信息表
- (
- ComPID int,
- CompName varchar2(20)
- )
insert into 公司基本信息表 values(mySeq.nextVal,'AA')
【編輯推薦】