Oracle 使用序列创建自增字段

 在Oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
        1、Create Sequence
        你首先要有create sequence或者create any sequence权限

CREATE SEQUENCE SEQ_EMP   
INCREMENT BY 1 -- 每次加几个    
START WITH 1 -- 从1开始计数    
NOMAXVALUE -- 不设置最大值 (MAXVALUE 99999999)   
NOCYCLE -- 一直累加,不循环    
CACHE 10; --设置缓存CACHE个序列,如果系统DOWN掉了或者其它情况将会导致序列不连续,也可以设置为NOCACHE  

 针对SEQ_EMP创建的sequence如下:

CREATE SEQUENCE SEQ_EMP   
MINVALUE 1   
MAXVALUE 99999999   
START WITH 1   
INCREMENT BY 1   
NOCACHE;  

 一旦定义了SEQ_EMP,你就可以用currval,nextval
        currval=返回 sequence的当前值
        nextval=增加sequence的值,然后返回 sequence 值
        比如:
        SEQ_EMP.CURRVAL
        SEQ_EMP.NEXTVAL

        可以使用sequence的地方:
        - 不包含子查询、snapshot、view的 select 语句
        - INSERT语句的子查询中
        - NSERT语句的values中
        - UPDATE 的 set中

        可以看如下例子:

INSERT INTO T_EMPLOYEE(ID,NAME,ORDER)VALUES(SEQ_EMP.NEXTVAL,'WANG',100); 

 

2、修改序列(Alter Sequence )
         你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以修改(alter)除start至以外的所有sequence参数.如果想要改变start值,必须删除序列( drop sequence ),再重新创建 (re-create ).
        Alter sequence 的例子

ALTER SEQUENCE SEQ_EMP   
INCREMENT BY 10    
MAXVALUE 10000    
CYCLE -- 到10000后从头开始    
NOCACHE ;

 

影响Sequence的初始化参数:
         SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。

        3、删除序列
        简单的Drop Sequence

drop sequence SEQ_EMP;  

 

CREATE SEQUENCE SEQ_EMP   
MINVALUE 1   
MAXVALUE 99999999   
START WITH 1   
INCREMENT BY 1   
NOCACHE   
ORDER;  

 

建立解发器代码为

CREATE OR REPLACE TRIGGER TRI_EMP_ID --触发器名称   
  BEFORE INSERT ON T_EMPLOYEE    --T_EMPLOYEE是表名   
  FOR EACH ROW   
DECLARE  
   NEXTID NUMBER;   
BEGIN  
  IF :NEW.ID IS NULL OR :NEW.ID=0 THEN --ID是列名   
    SELECT SEQ_EMP.NEXTVAL --SEQ_EMP正是刚才创建的序列   
    INTO NEXTID   
    FROM SYS.DUAL;   
     :NEW.ID:=NEXTID;   
  END IF;   
END TRI_EMP_ID;

 

上面的代码就可以实现id自动递增的功能了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值