1. 序列具有以下特性:自动生成唯一编号,是一个可共享的对象,通常用于创建主键值,如果将序列高速缓存到内存中,则可以提高访问序列值得效率。
生成唯一的整数,序列号的存储和生成与表无关,因此同一序列可以用于多个表。
2. 创建序列:
Create sequence dept_deptid_seq INCREMENT BY 10(指定间隔)
START WITH 120
MAXVALUE 9999
NOCACHE
NOCYCLE;
3. 确认序列:
在USER_SEQUENCES数据字典表中验证序列值
Select sequence_name,min_value,max_value,increment_by,last_number from user_sequences;
Last_number列将显示下一个可用的序列号(如果指定了NOCACHE)
4. NEXTVAL:
NEXTVAL会返回下一个可用的序列值。每次被引用时它都会返回一个唯一的值,即使对于不同的用户也是这样。
5. CURRVAL:获得当前序列值
必须对该序列发出NEXTVAL,然后CURRVAL才能包含值
NEXTVAL伪列用于从指定的序列中抽取连续的序列号。您必须用序列名来限定NEXTVAL。当您引用sequence.NEXTVAL时,系统会生成新的序列号,并且将当前序列号放置在CURRVAL中。CURRVAL伪列用于引用当前用户刚刚生成的序列号。必须首先用NEXTVAL在当前用户的会话中生成一个序列号,然后才能引用CURRVAL。必须用序列名来限定CURRVAL。当引用sequence.CURRVAL时,会显示给那个用户进程的最后一个值。
6. 使用NEXTVAL和CURRVAL的规则:
您可以在以下上下文中使用NEXTVAL和CURRVAL:
a. 不属于字查询一部分的select语句的select列表
b. INSERT语句中的字查询的select列表
c. INSERT语句的VALUES字句
d. UPDATE语句的SET字句。
7. 使用序列:
在内存中高速缓存序列可以更快地访问那些序列值。当首次引用序列时,系统会将序列值填充到高速缓存中。要查看下一个序列值得每个请求都会从高速缓存的序列中检索到所需的值。在使用了最后一个序列值之后,对序列的下一个请求会将序列的另一个高速缓存拖入到内存中。
虽然序列生成器是发出没有间断的连续序号,但是此操作会受提交或回退操作的影响。因此如果回退一个包含序列的语句,则该序列号将会丢失。另一个可能原因是系统崩溃。
如果序列使用了NOCACHE选项,则通过查询USER_SEQUENCES表就可以查看下一个可用的序列值,而不使它递增。
8. 修改序列:
Alter sequence dept_deptid_seq INCREMENT BY 20
MAXVALUE 99999
NOCACHE
NOCYCLE;
9. 修改序列的准则:
必须具有ALTER的权限,修改只会影响以后生成的序列号,如果要从不同的序号处重新开始,则必须删除原来原有的序列然后重新创建(即不能更改START WITH选项),系统会执行一些验证操作(即系统无法强加一个小于当前序列号的新MAXVALUE)
10. 删除序列:
Drop sequence dept_deptid_seq;