由于它属于可共享对象,所以允许多个用户访问。一般情况下,序列用于创建主键值。
序列号的存储和生成与表无关。因此,同一序列可以用于多个表。
一、创建序列
create sequence 序列名
[increment by n] --指定序列号的间隔值,其中n 为整数
[start with n] --指定要生成的第一个序列号(如果省略该语句,序列将从1 开始)
[{maxvalue n | nomaxvalue}] --指定当序列达到其最大值或最小值后,是否继续生成值
NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增
序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。
MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是
默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生
的最小值是?10的26次方;对于递增序列,最小值是1。
[{minvalue n | nominvalue}]
[{cycle | nocycle}] ---表示当序列生成器的值达到限制值后是否循环。
CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最
小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值
就会发生错误。
[{cache n | nocache}]; --指定Oracle 服务器预先分配并保留在内存中的值的个数。(默认20)如果系统崩溃,这些值将丢失。
实例:
create sequence user_seq
increment by 1
start with 1
maxvalue 50000
nocache
nocycle;
二、查询序列
(1)要验证序列已创建,请查询user_sequences数据字典。要查看序列的所有设置,请按如下所示方式查询USER_SEQUENCES 数据字典。
select sequence_name, min_value, max_value, increment_by, last_number from user_sequences;
(2)查看当前用户的所有序列
select sequence_owner,sequence_name from dba_sequences where sequence_owner='PPNIE';
注意:sequence_owner的值必须为大写,不管你的用户名是否大写。只有大写才能识别。
(3)查询当前用户的序列总数select count(*) from dba_sequences where sequence_owner='用户名';
(4)生成删除该用户下的序列号的sql语句
select 'drop sequence ' ||sequence_name ||' ;' from dba_sequences where sequence_owner='PPNIE';
三、nextval和currval使用
nextval 伪列用于从指定序列中提取连续的序列号。必须用序列名来限定nextval。
在引用“序列名.nextval”时,会生成新的序列号,并将当前的序列号放置在currval 中。
insert into t_user(uiid,uname) values(user_seq.nextval,'系统管理员');
可以在下列上下文中使用nextval 和currval:
- 不属于子查询的select 语句的select 列表
- insert 语句中子查询的select 列表
- insert 语句的values 子句
- update 语句的set 子句
四、修改序列
alter sequence 序列名
[increment by n]
[{maxvalue n | nomaxvalue}]
[{minvalue n | nominvalue}]
[{cycle|nocycle}]
[{cache n|nocache}];
注意:不能修改序列的初始值
alter sequence seq_empid
increment by 2;
注:
Oracle修改序列(Sequence)起始值的方法
五、删除序列
drop sequence 序列名;drop sequence seq_empid