1) 建立序列命令
CREATE SEQUENCE [user.]sequence_name
[increment by n]
[start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue];
INCREMENT BY: 指定序號之間的間隔,該值可為正的或負的整數,但不可為0。序列為升序。忽略該子句時,預設值為1。
START WITH:指定產生的第一個序號。在升序時,序列可從比最小值大的值開始,預設值為序列的最小值。對於降序,序列可由比最大值小的值開始,預設值為序列的最大值。
MAXVALUE:指定序列可產生的最大值。
NOMAXVALUE:為升序指定最大值為1027,為降序指定最大值為-1。
MINVALUE:指定序列的最小值。
NOMINVALUE:為升序指定最小值為1。為降序指定最小值為-1026。
2) 更改序列命令
ALTERSEQUENCE [user.]sequence_name
[INCREMENT BY n]
[MAXVALUE n| NOMAXVALUE ]
[MINVALUE n | NOMINVALUE];
修改序列可以:
? 修改未來序列值的增量。
? 設定或撤消最小值或最大值。
? 改變緩衝序列的數目。
? 指定序號是否是有序。
3) 刪除序列命令
DROP SEQUENCE [user.]sequence_name;
從資料庫中刪除一序列。
建立一個序號的語句:
CREATE SEQUENCE EXAM_NO_SEQ START WITH 1484 MAXVALUE 9999999999 MINVALUE 1 CYCLE CACHE 20 NOORDER;
PB中取序號的用法:
string v_exam_no//擷取申請序號SELECT exam_no_seq.nextval INTO :v_exam_no FROM dual using ghis_database;if ghis_database.SQLCODE<>0 then messagebox("","取檢查序號出錯")returnend if
================================================================================
其他版本
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 總是返回當前SEQUENCE的值,但是在第一次NEXTVAL初始化之後才能使用CURRVAL,否則會出錯。一次NEXTVAL會增加一次SEQUENCE的值。
如果指定CACHE值,ORACLE就可以預先在記憶體裡面放置一些sequence,這樣存取的快些。cache裡面的取完後,oracle自動再取一組到cache。 使用cache或許會跳號, 比如資料庫突然不正常down掉(shutdown abort),cache中的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')
3:如何修改序列
修改前提是sequence 的owner,或者有ALTER ANY SEQUENCE 許可權才能改動sequence. 可以alter除start至以外的所有sequence參數.如果想要改變start值,必須 drop sequence 再 re-create .
Alter sequence 的例子:
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXvalue 10000
CYCLE -- 到10000後從頭開始
NOCACHE
影響Sequence的初始化參數:
SEQUENCE_CACHE_ENTRIES =設定能同時被cache的sequence數目。
也可以這樣
alter sequence mySeq maxvalue 500
注意:不能改start with,其他隨便改(設定minvalue值的時候不能大於當前值)
4:如何查看刪除某個資料表空間所有序列
查看:
select * from user_sequences
如何刪除:
drop sequence 序列名稱
5:sequence屬於什麼對象
sequence不屬於某個表,也不屬於某個欄位,sequence僅僅屬於某個使用者。
其實在建立了sequence後,每個表都可以使用這個sequence,但是這樣會引起應用的很多麻煩,因此,建議每個表都使用一個sequence
小試牛刀: