作者:广州教育在线 来源:广州教育在线 更新日期:2017/1/19
阅读次数: 在Oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 1、Create Sequence 你首先要有create sequence或者create any sequence权限 Sql代码 CREATE SEQUENCE SEQ_EMP INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 (MAXVALUE 99999999) NOCYCLE -- 一直累加,不循环 CACHE 10; --设置缓存CACHE个序列,如果系统DOWN掉了或者其它情况将会导致序列不连续,也可以设置为NOCACHE 针对SEQ_EMP创建的sequence如下: Sql代码 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中 可以看如下例子: Sql代码 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 的例子 Sql代码 ALTER SEQUENCE SEQ_EMP INCREMENT BY 10 MAXVALUE 10000 CYCLE -- 到10000后从头开始 NOCACHE ; 影响Sequence的初始化参数: SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。 3、删除序列 简单的Drop Sequence Sql代码 drop sequence SEQ_EMP; Sql代码 CREATE SEQUENCE SEQ_EMP MINVALUE 1 MAXVALUE 99999999 START WITH 1 INCREMENT BY 1 NOCACHE ORDER; 建立解发器代码为 Sql代码 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自动递增的功能了。
相关文章:
|