序列(sequence)定義存儲在數據字典中,序列通過提供唯一的數值順序表用于簡化程序設計工作。當一個序列第一次查詢調用的時候,它將返回一個預訂值。在隨后的每一次查詢中,序列將產生一個按其指定的增量增長的值。序列是可以循環的,或者是連續增加的,直到指定的最大值為止。
使用sql命令創建序列的語法:
CREATE SEQUENCE sequence_name /*將要創建的序列名稱*/
[INCREMENT BY integer] /*遞增或者遞減值*/
[START WITH integer] /*初始值*/
[MAXVALUE integer] /*最大值*/
[MINVALUE integer] /*最小值*/
[CACHE integer|NOCACHE] /*高速緩沖區設置*/
INCREMENT BY :指定序列遞增或者遞減的間隔數值。
START WITH:序列的起始值,若不指定該值,對升序序列,將使用該序列默認的最小值,對于降序序列將使用該序列默認的最大值
MAXVALUE:序列可以允許的最大值
MINVALUE:序列可以允許的最小值
CACHE:由數據庫預分配并存儲的值得數目。默認值為20
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as scott
SQL>
SQL> --創建BASICDATA_VENDOR表VENDOR_OID要使用的序列
SQL> -- Create sequence
SQL> create sequence SEQ_BASICDATA_VENDOR_OID
2 minvalue 1
3 maxvalue 999999
4 start with 1001
5 increment by 1
6 cache 20;
Sequence created
SQL> commit;
Commit complete
SQL> select SEQ_BASICDATA_VENDOR_OID.NEXTVAL from dual;
NEXTVAL
----------
1001
SQL> select SEQ_BASICDATA_VENDOR_OID.NEXTVAL from dual;
NEXTVAL
----------
1002
SQL> drop sequence SEQ_BASICDATA_VENDOR_OID;
Sequence dropped
SQL> commit;
Oracle序列的用處,在一些情況很多人習慣使用select sysguid() from dual查詢出的32位字符串去做一個table的主鍵
雖然sysguid唯一性非常好,但是在做表的維護和業務報表排序時sysguid并不具有數據進入數據庫的先后次序和良好的排序功能
其實可以將蘇列看成是簡單的流水號,這樣在表中在取一個字段比如部門代號和這個流水號合起來做主鍵這樣對于表的維護和查看會更好
當創建號一個序列后,可以在pl/sql使用:
vNO number;
select 序列名稱.nextval into vNO from dual;
在作insert(插入數據時)將vNO作為表中的一個id值value插入使用