Oracle數據庫之序列

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;

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