数据库模式对象序列
开发中最重要,序列(sequence)是序列号的生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。
创建序列需要
create sequence权限。序列的创建语法如下:
CREATE SEQUENCE 序列名
[increment by n]
[start with n]
[{maxvalue n|NOMAXVALUE}]
[{MINVALUE n|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE N|NOCACHE}]
/* increment 步长是多少
start 初始值多少
maxvalue/MINVALUE 最大最小值
CYCLE 是否循环
NOCACHE 缓存值(一次生成多少个序列)*/
其中: INCREMENT BY 用于定义序列的步长,如果省略,则默认为1,如果出现负值,则序列的值是按照此步长递减的。
start with 定义学列的初始值(即产生的第一个值),默认为1
maxvalue 定义序列生成器的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增序列,系统能产生的最大值为10的27次方:对于递减序列,最大值是-1
删除序列:
drop sequence 序列名;
删除序列的认应该是序列的创建者或者拥有drop any sequence系统权限的用户。序列一旦删除就不能被引用了。序列的某些部分也可以在使用中进行修改,但不能修改start with选项。对序列的修改只影响随后产生的序号,已经产生的序号不变,修改序列的语法如下:
序列的使用
如果已经创建了序列,怎么使用?方法是使用currval和nextval来引用序列的值。
NEXTVAL 取得下一个序列的值
CURRVAL 取得当前序列的值,新打开的会话中,是不存在currval值,必须执行一次nextval生成一个拿到当前值。
调用NEXTVAL将生成序列中的下一个序列号,调用时要指出序列名,调用:
序列名.nextval
CURRVAL用于产生序列的当前值,无论调用多少次都不会产生序列的下一个值。如果序列还没通过调用nextval产生序列的下一个值,先引用CURRVAL没有意义。调用CURRVAL的方法同上,
序列名.CURRVAL
--eg 序列的应用:创建用于表emp的主键列的序列
create sequence seq_emp increment by 1 start with 1 maxvalue 100000;
--使用序列
insert into emp(id,empname ,sex) values(seq_emp.nextvalue,'张三'|seq_emp.currval,'男');
insert into emp(id,empname ,sex) values(seq_emp.nextvalue,'张三'|seq_emp.currval,'男');
insert into emp(id,empname ,sex) values(seq_emp.nextvalue,'张三'|seq_emp.currval,'男');
查看序列
通过数据字典USER_OBJECTS可以查看用户拥有的序列。
通过数据字典user_sequences可以查看序列的设置。
标签:CURRVAL,seq,sequence,currval,emp,序列 From: https://www.cnblogs.com/xjianbing/p/17549552.html