sequence


    序列是用戶創建的數據庫對象,序列可以被多個用戶共享以產生唯一的整數。序列的一個典型的用途是創建一個主鍵的值,它對於每一行必須是唯一的。序列由一個 Oracle 內部程序產生並增加或減少。序列是一個節省時間的對象,因為它可以減少應用程序中產生序列程序的代碼量。序列號獨立於表被存儲和產生,因此,相同的序列可以被多個表使用。

語法:
CREATE SEQUENCE Sequence_name
[INCREMENT BY n]                ---指定序列號增量,n是一個整數(如果省略,序列增量為1)
[START WITH n]                     ---默認從1開始
[{MAXVALUE n| NOMAXVALUE}]                 ---升序最大值為10^27,降序最大值為-1
[{MINVALUE n| NOMINVALUE}]               ---升序最小值為1,降序最小值-(10^26)
[{CYCLE | NOCYCLE}]          ---是否循環,默認nocycle
[{CACHE n| NOCACHE}];                ---預先分配多少值,默認20

ORDER|NOORDER 選項可用,ORDER 選項保證序列值按順序產生,如果你將序列用於產生主鍵值它是不重要的,該選項僅與 Parallel Server(並行服務)選項有關。默認noorder

CREATE SEQUENCE dept_deptid_seq
INCREMENT BY 10
START WITH 120
MAXVALUE 9999
Nocache
NOCYCLE;

查看序列

select object_name,object_id,object_type From USER_OBJECTS Where object_name = 'DEPT_DEPTID_SEQ';
col sequence_name for a20
select * From USER_SEQUENCES Where sequence_name = 'DEPT_DEPTID_SEQ';

---獲取創建seq ddl
select DBMS_METADATA.GET_DDL('SEQUENCE','SEQUENCENAME') from DUAL;

 

nextval、currval使用規則:

可以在下面的上下文中使用 NEXTVAL 和 CURRVAL:

  • 一個不是子查詢的一部分的 SELECT 語句的 SELECT 列表
  • 在一個 INSERT 語句中子查詢的 SELECT 列表
  • 一個 INSERT 語句中的 VALUES 子句
  • 一個 UPDATE 語句的 SET 子句

不能在下面的上下文中使用 NEXTVAL 和 CURRVAL:

  • 一個視圖的 SELECT 列表
  • 一個帶 DISTINCT 關鍵字的 SELECT 語句
  • 一個帶 GROUP BY、HAVING 或 ORDER BY 子句的 SELECT 語句
  • 一個在 SELECT、DELETE 或 UPDATE 語句中的子句
  • 在 CREATE TABLE 或 ALTER TABLE 語句中的 DEFAULT 表達式
SQL> SELECT dept_deptid_seq.nextVAL FROM dual;

   NEXTVAL
----------
       120

SQL> SELECT dept_deptid_seq.CURRVAL FROM dual;

   CURRVAL
----------
       120

修改序列

ALTER SEQUENCE dept_deptid_seq INCREMENT BY 20 MAXVALUE 999999 cache 100;
---START WITH 選項不能被改變

DROP SEQUENCE dept_deptid_seq;

 序列遷移

SELECT 'drop SEQUENCE ' || SEQUENCE_NAME || ';CREATE SEQUENCE ' ||
       SEQUENCE_NAME || ' INCREMENT BY ' || INCREMENT_BY || ' START WITH ' ||
       LAST_NUMBER || ' MAXVALUE ' || MAX_VALUE || ' ' || (case
         when CACHE_SIZE = 0 then
          'NOCACHE'
         else
          'CACHE ' || CACHE_SIZE
       end) || ' ORDER NOCYCLE ;'
  FROM dba_SEQUENCES where sequence_owner= '用戶名';

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM