oracle sequence

      最初接触sequence还是听说oralce 用来实现sql server 中的indentity(1,1)的功能。主要实现的方法,一个表,一个sequece,一个触发器。

     创建表:

     create or replace table table_name(id number,name varchar2(10));

    创建sequence语法:

         create sequence Sequence_name
        increment by 1 --表示从1开始计值
        start with 1  --每次增长1
        nomaxvalue / maxvalue 999999 --有两个可选值,
        要么无最大值,要么指定最大值
        minvalue 1 / nominvalue  --同maxvalue
        cycle --表示达到最大值后从头开始,也可以为nocycle
        cache 10 --指定cache的值。如果指定CACHE值,oracle就可以预先在内
        存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle
        自动再取一组到cache。使用cache或许会跳号, 比如数据库突然不正常down
        掉(shutdown abort),cache中的
        sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。
        order;--指定排序

        ORDER   和   NOORDER   的区别表现在   并行服务   和   独占服务   之间

            order 保证序列号按请求顺序产生

            noorder  并不保证顺序号按请求顺序产生.

        创建sequence不指定cache参数的时候oracle默认设置为20

 

      一旦定义了Sequence_name,你就可以用CURRVAL,NEXTVAL 
     CURRVAL=返回 sequence的当前值 
     NEXTVAL=增加sequence的值,然后返回 sequence 值 
    比如:  
      Sequence_name.CURRVAL  
      Sequence_name.NEXTVAL 
   
    可以使用sequence的地方: 
    - 不包含子查询、snapshot、VIEW的 SELECT 语句 
    - INSERT语句的子查询中 
    - NSERT语句的VALUES中 
    - UPDATE 的 SET中   

 

     可以看如下例子: 
     INSERT INTO emp VALUES  
     (seq_name.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20); 
    
     SELECT seq_name.currval     FROM DUAL; 
    
     但是要注意的是: 
     - 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白? 
    
     - 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。 
    
     2、Alter Sequence 
     你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop  sequence 再 re-create . 
     Alter sequence 的例子 
     ALTER SEQUENCE seq_name 
         INCREMENT BY 10 
         MAXVALUE 10000 
         CYCLE    -- 到10000后从头开始 
         NOCACHE ; 
    
    
     影响Sequence的初始化参数: 
     SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。  
    
     可以很简单的Drop Sequence 
     DROP SEQUENCE order_seq;

 

 

原文出处:http://andzen.ycool.com/post.2959597.html(默认参数)

                    http://dev.csdn.net/article/70/70231.shtm(sequence)

                    http://baike.baidu.com/view/786767.htm  (oracle集群 rac)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值