Oracle - Sequence序列

襲冷發表於2018-01-15
一、序列說明
    ORACLE 沒有自增資料型別,如需生成業務無關的主鍵列或惟一約束列,可以用 Sequence 序列實現

二、建立序列
CREATE SEQUENCE SEQ_NAME    -- 序列名
MINVALUE 1    -- 定義序列的最小值,系統能產生的最大值為28個9。不設定時預設為 NOMINVALUE,此時遞增序列最小值為1,遞減為負10的26次方
MAXVALUE 10000    -- 定義序列的最大值,系統能產生的最大值為28個9。不設定時預設為 NOMAXVALUE,此時遞增序列最大值為10的27次方,遞減為負1
START WITH 1    -- 定義序列產生的第一個值。預設時,升序為最小值開始,降序為最大值開始
INCREMENT BY 1    -- 定義序列的步長。如果省略,則預設為1;如果出現負值,則代表為降序序列
NOCACHE    -- 定義序列不預先快取值到記憶體。可以用 CACHE SIZE 來定義快取的大小,使用快取在獲取時能相對快一些但可能產生跳號
NOCYCLE    -- 定義序列的值達到最大值後不迴圈。不迴圈用 NOCYCLE 表示,迴圈用 CYCLE 指定,預設 NOCYCLE
NOORDER ;    -- 定義序列產生的序列號不需要保證按請求順序產生,需要使用 ORDER 指定,不需要也可以不定義該引數
三、刪除序列
DROP SEQUENCE 使用者.序列名;

四、檢視序列

SELECT 
    SEQUENCE_NAME, MIN_VALUE, MAX_VALUE, INCREMENT_BY, CYCLE_FLAG, ORDER_FLAG, CACHE_SIZE, LAST_NUMBER 
FROM DBA_SEQUENCES;
五、查詢獲取

    -- 查詢序列的當前的值
    SELECT SEQ_NAME.CURRVAL FROM DUAL;  -- SEQUENCE建立後需要先NEXTVAL後才能執行CURRVAL

    -- 獲取序列的下一個值
    SELECT SEQ_NAME.NEXTVAL FROM DUAL;  -- SEQUENCE會先執行一次步長,然後返回步長後的值

六、修改序列

-- 1. 檢視當前的序列值
SELECT SEQ_TEST_1.CURRVAL FROM DUAL;
-- 2. 設定一個新的步長
ALTER SEQUENCE SEQ_TEST_1 INCREMENT BY 100;
-- 3. 獲取設定為新步長後的下一個序列值
SELECT SEQ_TEST_1.NEXTVAL FROM DUAL;
-- 4. 修改回舊的步長
ALTER SEQUENCE SEQ_TEST_1 INCREMENT BY 1;
-- 5. 使用舊的步長獲取下一個序列值
SELECT SEQ_TEST_1.NEXTVAL FROM DUAL;



相關文章