序列是Oracle提供的用於產生一系列唯一數字的數據庫對象。使用序列可以實現自動產生主鍵值。序列也可以在許多用戶並發環境中使用,為所有用戶生成不重復的順序數字,而且不需要任何額外的I/O開銷。
與視圖一樣,序列並不占用實際的存儲空間,只是在數據字典中保存它的定義信息。用戶要在自己的模式中創建序列,必須具有CREATE SEQUECNCE系統權限,如果要在其他模式中創建序列,則必須具有CREATE ANY SEQUENCE系統權限。
創建序列的語法如下:
CREATE SEQUENCE sequence_name
[START WITH start]
[INCREMENT BY increment]
[MINVALUE minvalue | NOMINVALUE]
[MAXVALUE maxvalue | NOMAXVALUE]
[CACHE cache | NOCACHE]
[CYCLE | NOCYCLE]
[ORDER | NOORDER]
首先,以SYSDBA角色登錄,賦予用戶創建序列權限:
GRANT CREATE ANY SEQUENCE TO siege
然後創建序列:
CREATE SEQUENCE stu_seq
START WITH 1
INCREMENT BY 1
NOMAXVALUE
NOCYCLE;
使用序列,需要使用序列的兩個偽劣NEXTVAL和CURRVAL。修改序列使用ALTER SEQUENCE語句,除了序列的起始值之外,可以重新定義序列的任何子句和參數進行修改。如果要修改序列的起始值,則必須先刪除序列,然後再重新創建該序列。對序列進行修改後,在緩存中的序列值將全部丟失,可以通過數據字典USER_SEQUENCE獲取序列的信息。
SELECT * FROM user_sequences WHERE sequence_name='STU_SEQ'
結果如下:
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY CYCLE_FLAG ORDER_FLAG CACHE_SIZE LAST_NUMBER STU_SEQ 1 1E28 1 N N 20 1
ALTER SEQUENCE stu_seq
MAXVALUE 9999
CACHE 9
CYCLE
ORDER;
若要修改起始值,則只能刪除序列然後重新創建。