CREATE SEQUENCE介紹

語法說明

  • 建立序列,用序列能自動產生連續數值等,替傳票號碼等唯一號碼進行編號時相當方便實用
格式
CREATE SEQUENCE [schema.]sequence_name
   [ INCREMENT BY i ]
             [ START WITH s ]
   [ NOMAXVALUE | MAXVALUE max ]
   [ NOMINVALUEMINVALUE min ]
   [ NOCYCLE | CYCLE ]
   [ CACHE cache | NOCACHE ]
   [ NOORDER | ORDER ];
schema : 結構名稱
sequence_name : 序列名稱
i : 序列的遞增間隔,可指定的數字為28位數內的非0(零)正負整數
s : 序列的開始值,可指定的數字為28位數內的整數,可以為0(零) 
max : 序列的最大值
min :  序列的最小值
cache : 快取的序列數
INCREMENT BY : 指定序列遞增間隔,省略不指定預設為1
START WITH : 指定序列起始值,序列為昇冪時,起始值為比最小值還要大的值,降冪時則為比最大值要小的值,若省略而不指定,昇冪時的起始值為最小值,降冪時為最大值
NOMAXVALUE | MAXVALUE : 指定序列的最大值,若省略而不指定,或指定為 NOMAXVALUE 則昇冪時最大值為10的27次方,降冪時為-1
NOMINVALUE | MINVALUE : 指定序列的最小值,若省略而不指定,或指定為 NOMINVALUE 則昇冪時最小值為1,降冪時為10的26次方的負值
NOCYCLE CYCLE :  當序列達最大值(或是降冪達最小值)時,指定是否循環,若省略而不指定,或指定為 NOCYCLE ,則序列達到最大值或最小值的那一刻起,就不會再產生更大或更小的值,若指定為 CYCLE 當序列達最大值後,會回到最小值 (降冪的情況中則會回到最大值)
CACHE NOCACHE : 指定快取的序列數,增加快取數量時,雖然能夠快速存取序列,但注意若實體非正常結束,會失去快取中的全部未使用值,指定 NOCACHE 會使快取無效,若省略而不指定,則會快取20個序列
NOORDER | ORDER : 在RAC的環境裡使用序列時,若要按照順序產生序列則需特別指定,不需要按時截傳回時指定 NOORDER ,此為預設值
序列使用方法

  • 序列使用時會運用名為 [CURRVAL] 和 [NEXTVAL]的虛擬欄位,[CURRVAL]顯示序列現在的值,[NEXTVAL]產生下一個序列值
  • 在使用NEXTVAL之前,不管參照CURRVAL幾次,序列值永不改變
語法示範
說明 : 建立hr_seq序列
create sequence hr_seq
    start with 0
    increment by 1
    nocycle;
說明 : 產生序列,並新增到emp表格
insert into emp(id,name) values(hr_seq.nextval ,'John');
說明 : 查詢 hr_seq 序列現在的值
select hr_seq.currval from dual;
補充說明

  • 序列並不能保證產生連續的數值,例如,在某個時間點的交易所產生的序列,因交易回復,會使得下一個序列不會變成連續的數值,這是因為即使交易回復,之前所產生的序列值也不會跟著回復,因此需要連續號碼時,並不建議使用序列