Oracle 使用序列创建自增字段

发表于:2009-7-31 10:18

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

#
Oracle

  在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自动递增的功能了。

 

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号