1. 程式人生 > >oracle序列

oracle序列

目錄

1.什麼是序列

  • 序列: 可供多個使用者用來產生唯一數值的資料庫物件

    • 自動提供唯一的數值

    • 共享物件

    • 主要用於提供主鍵值

    • 將序列值裝入記憶體可以提高訪問效率

2.定義序列

CREATE SEQUENCE sequence
       [INCREMENT BY n]  --每次增長的數值
       [START WITH n]    --從哪個值開始
       [{MAXVALUE n | NOMAXVALUE}]
       [{MINVALUE n | NOMINVALUE}]
       [{CYCLE | NOCYCLE}]     --是否需要迴圈
       [{CACHE n | NOCACHE}];  --是否快取登入

3.查詢序列

  • 查詢資料字典檢視 USER_SEQUENCES 獲取序列定義資訊

SELECT  sequence_name, min_value, max_value, 
    increment_by, last_number
FROM    user_sequences;

4.NEXTVAL 和 CURRVAL 偽列

  • NEXTVAL 返回序列中下一個有效的值,任何使用者都可以引用

  • CURRVAL 中存放序列的當前值

  • NEXTVAL 應在 CURRVAL 之前指定,否則會報CURRVAL 尚未在此會話中定義的錯誤。

5.序列應用例項

INSERT INTO departments(department_id, 
            department_name, location_id)
VALUES      (dept_deptid_seq.NEXTVAL, 
            'Support', 2500);

6.修改序列

-- 修改序列的增量, 最大值, 最小值, 迴圈選項, 或是否裝入記憶體
​
ALTER SEQUENCE dept_deptid_seq
               INCREMENT BY 20
               MAXVALUE 999999
               NOCACHE
               NOCYCLE;
/*
注意事項:
    1.必須是序列的擁有者或對序列有 ALTER 許可權
    2.只有將來的序列值會被改變
    3.改變序列的初始值只能通過刪除序列之後重建序列的方法實現
*/

7.刪除序列

-- 使用 DROP SEQUENCE 語句刪除序列
-- 刪除之後,序列不能再次被引用
​
DROP SEQUENCE dept_deptid_seq;

8.序列的裂縫

  • 序列在下列情況下出現裂縫:

    • 回滾

    • 系統異常

    • 多個表同時使用同一序列