序列:可供多个用户来产生唯一数值的数据库对象
可以认为和mysql中的auto_increment功能类似
注意
CURRVAL: 返回序列的当前值。
NEXTVAL: 序列递增,返回下一值。
你不能使用序列的CURRVAL和NEXTVAL,在下面情况下(具体参见官方文档):
1:在DELETE、SELECT、UPDATE的子查询中
2:在视图或物化事物的查询中。
3:SELECT查询中使用了DISTINCT操作符。
1:在DELETE、SELECT、UPDATE的子查询中
2:在视图或物化事物的查询中。
3:SELECT查询中使用了DISTINCT操作符。
4:SELECT查询中有GROUP BY或ORDER BY
在经过删除回滚等操作之后,序列之间会产生断裂,删除某个序列不会对之前的数据产生影响
1 1,创建,修改序列,语法规则 2 CREATE SEQUENCE [user.]sequence_name 3 [increment by n] 4 [start with n] 5 [maxvalue n | nomaxvalue] 6 [minvalue n | nominvalue]; 7 INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。 8 START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。 9 MAXVALUE:指定序列可生成的最大值。 10 NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。 11 MINVALUE:指定序列的最小值。 12 NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。
1 当前序列的第一个指针指向的是第一个序号前,则next指向第一个序号,此时currval没有指向序号 2 SQL> select myseq.nextval from dual; 3 NEXTVAL 4 ---------- 5 1 6 SQL> select myseq.currval from dual; 7 select myseq.currval from dual 8 * 9 第 1 行出现错误: 10 ORA-08002: 序列 MYSEQ.CURRVAL 尚未在此会话中定义 11 12 13 2,创建序列 14 15 - create sequence seq_tank 16 - increment by 1 17 - start with 1 18 - minvalue 1 19 - maxvalue 99999 20 - nocycle 21 - cache 10 22 23 3,修改序列 24 25 - alter sequence seq_tank 26 - increment by 10 27 - maxvalue 1000 28 - cycle 29 - nocache 30 31 4,查看序列 32 33 - SQL> select * from user_sequences; 34 35 5,删除序列 36 37 - SQL> drop SEQUENCE seq_tank; 38 39 6,查看序列值 40 41 - SQL> select seq_test.nextval from dual; 42 - 43 - NEXTVAL 44 - ---------- 45 - 1