Oracle对象之序列

序列:可供多个用户来产生唯一数值的数据库对象
     可以认为和mysql中的auto_increment功能类似
 
注意

CURRVAL: 返回序列的当前值。
NEXTVAL: 序列递增,返回下一值。

你不能使用序列的CURRVAL和NEXTVAL,在下面情况下(具体参见官方文档):
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,为降序指定最大值为-111 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
 
 
原文地址:https://www.cnblogs.com/anzhi/p/7515830.html