Oracle序列
一.創建序列
序列:用于產生唯一序號的數據庫對象,可以為多個數據庫用戶依次生成不重復的連續整數,通常 使用序列生成自動生成表中的主鍵值。
在用戶自己的模式中創建序列時,必須具有CREATE SEQUENCE系統權限;
在其他用戶模式中創建序列時,必須具有CREATE ANY SEQUENCE系統權限;
1、創建序列語句:
CREATE SEQUENCE seq_name [START WITH start] [INCREMENT BY increment] [MINVALUE minvalue|NOMINVALUE] [MAXVALUE maxvalue|NOMAXVALUE] [CACHE cache |NOCACHE] [CYCLE |NOCYCLE]
2、參數說明:
START WITH :用于指定初始值
INCREMENT BY :用于指定序列增量(默認為1)
MINVALUE|NOMINVALUE:可生成的最小序列值,默認為 nominvalue
MAXVALUE|NOMAXVALUE:可生成的最大序列值,默認為 nomaxvalue
CACHE |NOCACHE:指定在內存中可以預分配的序列號個數,默認為20
CYCLE |NOCYCLE:指定在達到序列的最大值或最小值之后是否繼續復位重新生成序列號,默認為nocycle
例1:創建一個序列deptno_seq ,其開始值為10,增量為5,內存可預分配10個序列號
實現的語句
CREATE SEQUENCE deptno_seq START WITH 10 INCREMENT BY 5 CACHE 10;
二.使用序列
序列具有 CURRVAL和 NEXTVAL兩個偽列。 CURRVAL返回序列的當前值, NEXTVAL在序列中產生新值并返回此值。 CURRVAL和 NEXTVAL都返回 NUMBER類型值。可以通過 sequence name. CURRVAL和 sequence name. NEXTVAL形式來應用序列。
可以在下列語句中使用序列的 NEXTVAL和 CURRVAL偽列:
● SELECT語句的目標列中;
● INSERT語句的子查詢的目標列中;
● INSERT語句的 VALUES子句中;
● UPDATE語句的SET子句中。
在下列語句中不允許使用序列的 NEXTVAL和 CURRVAL偽列:
●對視圖查詢的SELECT目標列中;
●使用了DISTINCT關鍵字的 SELECT語句中;
● SELECTGROUP語句中使用了 BY、 HAVING或 ORDER BY子句時;
●在 SELECT、 DELETE或 UPDATE語句的子查詢中;
●在CREATE TABLE或 ALTER TABLE語句中的默認值表達式中。
產生序列的第一個值:
SELECT test sequence. NEXTVAL FROM DUAL;
產生序列的下一個值:
SELECT test sequence. NEXTVAL FROM DUAL;
產生序列的當前值:
SELECT test sequence. CURRVAL FROM DUAL;
注意第一次調用 NEXTVAL產生序列的初始值,根據定義知道初始值為10;第二次調用產生11,因為序列的步長為1.調用 CURRVAL,顯示當前值11,不產生新值。
例2:使用序列deptno_seq
向部門表dept中錄入記錄,要求列deptno使用序列值。
實現的語句:
INSERT INTO dept VALUES(deptno_seq.nextval,’銷售部’)
查詢序列deptno_seq的當前值:
select deptno_seq.currval from dual;
三.查詢序列
可通過查詢數據字典USER_SEQUENCES顯示當前用戶的所有序列的詳細信息。
SQL>SELECT increment_by, cache_size, max_value, last_number FROM user_sequences WHERE sequence_name=‘DEPTNO_SEQ’;
四.修改序列
1、修改序列的語句格式:
ALTER SEQUENCE sequence_name [INCREMENT BY increment] [MINVALUE minvalue|NOMINVALUE] [MAXVALUE maxvalue|NOMAXVALUE] [CACHE cache |NOCACHE] [CYCLE |NOCYCLE]
注意:用戶需要有ALTER SEQUENCE權限
注意:序列的初始值不能修改
【示例】修改序列sfudent_Seq的步長為1,緩存值的個數為5
SQL>ALTER SEQUENCE student _seq INCREMENT BY 1 CACHE 5;
五.刪除序列
當一個序列不再需要時,可以使用 DROP SEQUENCE語句刪除序列。刪除序列時,系統將序列的定義從數據字典中刪除,對于之前序列的應用沒有任何影響。
刪除序列的語句格式:
DROP SEQUENCE sequence_name
【示例】刪除序列 student_seq
SQL>DROP SEQUENCE student seq;
浙公網安備 33010602011771號