序列和视图一样,并不占用实际的存储空间,只是在数据字典中保存他的定义信息。当创建序列时必须拥有create sequence系统权限。
语法格式:
create sequence seq_name --创建的序列名。
[start with n] --可选的子句,制定序列的开始位置。默认情况下,递增序列的起始值为minvalue,递减序列的起始值为maxvalue。
[minvalue n | nomainvalue] --可选的子句,决定序列生成的最小值。
[maxvalue n | nomaxvalue] --可选的子句,决定序列生成的最大值。
[cache n | ncache] --该选项决定是否产生序列号预分配,并存储在内存中。
[cycle | nocycle] --可选的关键字,当序列到达最大值(maxvalue)或者最小值(minvalue)时可复位并继续下去。如果达到极限。生成的下一个数据将分别是最小值或者最大值。如果使用NO CYCLE 选项,那么在序列达到最大值或最小值之后,如果再试图获取下一个值将返回一个错误。
[order | noorder]; --该选项可以保证生成的序列值是按顺序产生的。例如:order可以保证第一个请求得到的数为1,第二个请求得到的数为2,以此类推而NOODDER只保证序列的值唯一性,不保证产生列值的顺序。
Increment by number :该子句是可选的,表示序列的增量。一个正数将生成一个递增的序列,一个负数将生成一个递减的序列。默认值为1
使用序列时,需要用到序列的两个伪列NexVal与CurrVal。其中nextval将返回序列生成的下一个序列号,而伪列currval则会返回序列的当前序列号。需要注意,首次引用序列时,必须使用伪列nextval。
例如: insert into scott.dept(deptno,dname,loc) values(seq_dept.nextval,'development',default);