Oracle中的序列 sequence 用法

来源:互联网 发布:淘宝卖家 转账20万 编辑:程序博客网 时间:2024/05/16 01:37
sybase 同埋sqlserver 系冇序列呢样野的。

但系oralce有。

oralce 序列简单d来讲类似于sybase的递增列的机制, 但是sybase 一张表只允许1个递增列, 而oracle没有这个限制,可以分别为一张表的若干个列指定不同的序列。

而且同1个序列可以由各个用户用在不同的表~

创建序列语法:
CREATE SEQUENCE sequence_name
               [INCREMENT BY n]                              
--递增的间隔,如果该句省略,默认是+1   
               [START WITH n]                                
--起始的值,如果该句省略,默认是1
               [{MAXVALUE n | NOMAXVALUE}]          --最大值,极限是10的27次方
               [{MINVALUE n | NOMINVALUE}]            --最小值,极限是-10的26次方
               [{CYCLE | NOCYCLE}]                         --到达最大或最小值后是否循环,默认是不循环
               [{CACHE n | NOCACHE}];
                          --指定 Oracle 服务器预先分配多少值,并且保持在内存中(默认
                                                                                            情况下,Oracle 服务器缓冲 20 个值,如果序列值被高速缓冲,如果系统故障它们将被丢失.




例如创建1个列, 用于表Dep_1 的主键。

Create sequence Dep_1_id_sq
                  increment by 1
                  start with 100
                  maxvalue 9999


跟住可以用下满语句来查看这个序列的属性。
select * from user_sequences where lower(sequence_name) = 'dep_1_id_sq' 



上图last_number 表示下1个可用序列号。

用这条语句来获得当前序列号码:
select dep_1_id_sq.currval from dual;


用这条语句来获得当前下一个号码:
select dep_1_id_sq.nextval from dual;

注:dep_1_id_sq.nextval 每被引用1次,例如上面的语句执行1此,序列号+1,也就是说上面语句每次返回的结果都比上一次加1。



使用序列:
如我要插入1条新数据到表dep_1,  可以用序列获得1个未被使用过的新key值。
insert into dep_1
select dep_1_id_sq.nextval,'ma',null from dual;


然后可以用
select dep_1_id_sq.currval from dual;
来或得这条数据的key值.
原创粉丝点击