orcale 中序列的使用和创建

来源:互联网 发布:无证之罪 郭宇 知乎 编辑:程序博客网 时间:2024/04/30 00:03
序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主码值。一个序列的值是由特殊的Oracle程序自动生成,因此序列避免了在应用层实现序列而引起的性能瓶颈。Oracle序列允许同时生成多个序列号,而每一个序列号是唯一的。 当一个序列号生成时,序列是递增,独立于事务的提交或回滚。允许设计缺省序列,不需指定任何子句。该序列为上升序列,由1开始,增量为1,没有上限。 

1、Create Sequence  

你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,  
CREATE SEQUENCE my_sequence 
    INCREMENT BY 1        -- 每次加几个  
    START WITH 1         -- 从1开始计数  
    NOMAXVALUE        -- 不设置最大值  
    NOCYCLE          一直累加,不循环  
    CACHE 10;  


一旦定义了my_sequence,你就可以用CURRVAL,NEXTVAL  
 CURRVAL=返回 sequence的当前值  
 NEXTVAL=增加sequence的值,然后返回 sequence 值  

比如:  
  my_sequence.CURRVAL  
  my_sequence.NEXTVAL  

可以使用sequence的地方:  
- 不包含子查询、snapshot、VIEW的 SELECT 语句  
- INSERT语句的子查询中  
- INSERT语句的VALUES中  
- UPDATE 的 SET中
   

2、Alter和Drop序列

你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start值 以外的所有sequence参数.如果想要改变start值,必须 drop  sequence 再 re-create . 

可以通过Alert  Sequence句来修改序列, 但是我在修改序列中常常会报错 而且很频繁.修改序列内容有如下限制:

(1)不能修改序列的初始值

(2)序列的最小值不能大于当前值

(3)序列的最大值不能小于当前值

---修改序列

alter sequence my_sequence increment by 2;

---删除序列

drop sequence my_sequence;


0 0
原创粉丝点击