序列
序列也是数据库对象之一。作用是生成一系列数字。序列常用于为某张表的主键字段提供值使用。
创建序列
创建序列的语法:
CREATE SEQUENCE [schema.]sequence_name
[ START WITH i ] [ INCREMENT BY j ]
[ MAXVALUE m | NOMAXVALUE ]
[ MINVALUE n | NOMINVALUE ]
[ CYCLE | NOCYCLE ][ CACHE p | NOCACHE ]
其中:
sequence_name是序列名,将创建在schema方案下
序列的第一个序列值是i,步进是j
如果j是正数,表示递增,如果是负数,表示递减
序列可生成的最大值是m,最小值是n
如果没有设置任何可选参数,序列的第一个值是1,步进是1
CYCLE表示在递增至最大值或递减至最小值之后是否继续生成序列号,若是递减并有最大值,从最大值开始。
若是递增有最小值,从最小值开始。若没有,从START WITH 指定的值开始。默认是NOCYCLE
CACHE用来指定先预取p个数据在缓存中,以提高序列值的生成效率,默认是20
CREATE SEQUENCE seq_emp_id_swm
START WITH 1
INCREMENT BY 1
序列支持两个伪列:
NEXTVAL
获取序列下一个值。若是新创建的序列,那么第一次调用返回的是START WITH 指定的值,以后每次调用都会得到当前序列值加上步长后的数字。
NEXTVAL会导致序列发生不仅,且序列不能回退。
SELECT seq_emp_id_swm.NEXTVAL
FROM dual
CURRVAL
获取序列当前值,即:最后一次调用NEXTVAL后得到的值,CURRVAL不会导致步进。但是新创的序列至少调用一次NEXTVAL后才可以使用CURRVAL。
SELECT seq_emp_id_swm.CURRVAL
FROM dual
使用序列为emp_swm表中新插入的数据提供主键字段的值
INSERT INTO emp_swm
(empno,ename,sal,job,deptno)
VALUES
(seq_emp_id_swm.NEXTVAL,'JACK',3000,'CLARK',10)
删除序列
语法:DROP SEQUENCE sequence_name;
DROP SEQUENCE seq_emp_id_swm