ORACLE SEQUENCE的簡單介紹(自增長字段)

oraclesequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。
1
Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE權限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 --
每次加幾個
START WITH 1 --
1開始計數
NOMAXVALUE --
不設置最大值
NOCYCLE -- 一直累加,不循環
CACHE 10;

一旦定義了emp_sequence,你就可以用CURRVALNEXTVAL
CURRVAL=
返回 sequence的當前值
NEXTVAL=
增加sequence的值,然後返回 sequence
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL

可以使用sequence的地方:
-
不包含子查詢、snapshotVIEW SELECT 語句
- INSERT
語句的子查詢中
- NSERT
語句的VALUES
- UPDATE
SET

可以看如下例子:
INSERT INTO emp VALUES
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);

SELECT empseq.currval FROM DUAL;

但是要注意的是:
-
第一次NEXTVAL返回的是初始值;隨後的NEXTVAL會自動增加你定義的INCREMENT BY值,然後返回增加後的值。CURRVAL 總是返回當前SEQUENCE的值,但是在第一次NEXTVAL初始化之後才能使用CURRVAL,否則會出錯。一次NEXTVAL會增加一次SEQUENCE的值,所以如果你在同一個語句裏面使用多個NEXTVAL,其值就是不一樣的。明白?

-
如果指定CACHE值,ORACLE就可以預先在內存裏面放置一些sequence,這樣存取的快些。cache裏面的取完後,oracle自動再取一組到cache 使用cache或許會跳號, 比如數據庫突然不正常down掉(shutdown abort),cache中的sequence就會丟失. 所以可以在create sequence的時候用nocache防止這種情況。

2Alter Sequence
你或者是該sequenceowner,或者有ALTER ANY SEQUENCE 權限才能改動sequence. 可以alterstart至以外的所有sequence參數.如果想要改變start值,必須 drop sequence
re-create .
Alter sequence
的例子

ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE --
10000後從頭開始

NOCACHE ;


影響Sequence的初始化參數:

SEQUENCE_CACHE_ENTRIES =
設置能同時被cachesequence數目。


可以很簡單的Drop Sequence

DROP SEQUENCE order_seq;


好吧,就到這裏。



-------------------------------------------------------------
自增長及觸發器
:

如何在Oracle 中實現類似自動增加 ID 的功能?

整理編輯:China
ASP

我們經常在設計數據庫的時候用一個系統自動分配的ID來作爲我們的主鍵,但是在ORACLE 中沒有這樣的


功能,我們可以通過採取以下的功能實現自動增加ID的功能

1.
首先創建
sequence
create sequence seqmax increment by 1
2.
使用方法

select seqmax.nextval ID from dual
就得到了一個ID

如果把這個語句放在 觸發器中,就可以實現和ms sql 的自動增加ID相同的功能!

摘自:http://hi.baidu.com/birdnic/blog/item/80ca5fedfe5350d0b31cb1c0.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章