1. 程式人生 > 其它 >Oracle資料庫之序列(sequence)

Oracle資料庫之序列(sequence)

Oracle資料庫之序列(sequence)

序列是一個計數器,它並不會與特定的表關聯。我們可以通過建立Oracle序列和觸發器實現表的主鍵自增。序列的用途一般用來填充主鍵和計數。

一、建立序列

語法結構:

CREATE SEQUENCE [ schema. ] sequence_name
  [ { INCREMENT BY | START WITH } integer
  | { MAXVALUE integer | NOMAXVALUE }
  | { MINVALUE integer | NOMINVALUE }
  | { CYCLE | NOCYCLE }
  | { CACHE integer | NOCACHE }
  | ...
  ]...
;

完整語法結構見:http://docs.oracle.com/database/121/SQLRF/statements_6017.htm#SQLRF01314

說明:

  1. schema:模式,即使用者名稱稱
  2. sequence_name:序列名稱
  3. INCREMENT BY:定義序列的步長,如果省略,則預設為1,如果出現負值,則代表Oracle序列的值是按照此步長遞減的。
  4. START WITH:定義序列的初始值,預設為1。
  5. MAXVALUE:序列生成器能產生的最大值。NOMAXVALUE是預設選項,代表沒有最大值定義。
  6. MINVALUE:序列生成器能產生的最小值。NOMINVALUE是預設選項,代表沒有最小值定義。
  7. CYCLE和NOCYCLE:當序列生成器的值達到限制值後是否迴圈。CYCLE代表迴圈,NOCYCLE代表不迴圈。如果迴圈,則當遞增序列達到最大值時,迴圈到最小值,最小值為1。對於遞減序列達到最小值時,迴圈到最大值。如果不迴圈,達到限制值後,繼續產生新值就會發生錯誤。
  8. CACHE:定義存放序列的記憶體塊的大小,預設為20,相當於預載入。緩衝部分序列計數以便更快獲取序列值,可以改善序列的效能,但快取選項可能會造成資料丟失。NOCACHE表示不緩衝。

示例:

CREATE SEQUENCE customers_seq
    START WITH 1000
    INCREMENT BY 1
    NOCACHE
    NOCYCLE;

二、刪除序列

語法:

DROP SEQUENCE [ schema. ] sequence_name ;

示例:

DROP SEQUENCE customers_seq;

三、使用序列

序列有兩個屬效能夠獲取序列的值:

CURRVAL:返回序列的當前值。

NEXTVAL:返回序列下一個值。

示例:.

INSERT INTO customers(id) VALUES (customers_seq.NEXTVAL);
SELECT customers_seq.CURRVAL FROM dual;

四、修改序列

語法:

ALTER SEQUENCE [ schema. ] sequence_name
  { INCREMENT BY integer
  | { MAXVALUE integer | NOMAXVALUE }
  | { MINVALUE integer | NOMINVALUE }
  | { CYCLE | NOCYCLE }
  | { CACHE integer | NOCACHE }
  | ...
  } ...
;

完整語法結構見:http://docs.oracle.com/database/121/SQLRF/statements_2014.htm#SQLRF00817

注意,不能修改序列的初始值,否則會報ORA-02283。如果需要修改初始值,先刪除序列再重新建立序列設定初始值。

示例:

ALTER SEQUENCE customers_seq 
    MAXVALUE 1500;
ALTER SEQUENCE customers_seq 
    CYCLE
    CACHE 5; 

五、序列檢視

SELECT * FROM USER_SEQUENCES;

SELECT * FROM ALL_SEQUENCES;

SELECT * FROM DBA_SEQUENCES;

Mysql學習