oracle sequence

ORACLE SEQUENCE用法

在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。

1、Create Sequence

首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。

创建语句如下:

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

2、得到Sequence值

定义好sequence后,你就可以用currVal,nextVal取得值。
    CurrVal:返回 sequence的当前值 
    NextVal:增加sequence的值,然后返回 增加后sequence值

得到值语句如下:

SELECT Sequence名称.CurrVal FROM DUAL;

如得到上边创建Sequence值的语句为:

select seqtest.currval from dual

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

如在插入语句中

insert into 表名(id,name)values(seqtest.Nextval,‘sequence 插入测试‘);

注:

- 第一次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防止这种情况。

3、Alter Sequence 
    拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create。

例:

alter sequence SEQTEST maxvalue 9999999;

另: SEQUENCE_CACHE_ENTRIES参数,设置能同时被cache的sequence数目。

4、Drop Sequence

DROP SEQUENCE seqTest;

5、一个例子

create sequence SEQ_ID
minvalue 1
maxvalue 99999999
start with 1
increment by 1
nocache
order;

建解发器代码为:

create or replace trigger tri_test_id
  before insert on S_Depart   --S_Depart 是表名
  for each row
declare
  nextid number;
begin
  IF :new.DepartId IS NULLor :new.DepartId=0 THEN --DepartId是列名
    select SEQ_ID.nextval --SEQ_ID正是刚才创建的
    into nextid
    from sys.dual;
    :new.DepartId:=nextid;
  end if;
end tri_test_id;

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

注::new 代表 数据改变后的新值,相对应的有 :old 原值

:= 代表 赋值

:nextid表示引用sqlplus中定义的变量

                                                        参考文档:http://www.cnblogs.com/scottckt/archive/2011/09/20/2182168.html

时间: 2024-10-11 00:29:48

oracle sequence的相关文章

【转】oracle sequence

原文链接  http://www.cnblogs.com/hyzhou/archive/2012/04/12/2444158.html ORACLE SEQUENCE用法 在oracle中sequence就是序号,每次取的时候它会自动增加.sequence与表没有关系. 1.Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限. 创建语句如下: 复制代码 CREATE SEQUENCE seqTest INCREMENT BY 1

oracle SEQUENCE 创建, 修改,删除

oracle创建序列化: CREATE SEQUENCE seq_itv_collection            INCREMENT BY 1  -- 每次加几个              START WITH 1399       -- 从1开始计数              NOMAXVALUE        -- 不设置最大值              NOCYCLE               -- 一直累加,不循环              CACHE 10; oracle修改序列

ORACLE Sequence 自增长

Sequence是数据库系统按照一定规则自动增加的数字序列.这个序列一般作为代理主键(因为不会重复),没有其他任何意义. Sequence是数据库系统的特性,有的数据库有Sequence,有的没有.比如Oracle.DB2.PostgreSQL数据库有Sequence,MySQL.SQL Server.Sybase等数据库没有Sequence. 根据我个人理解,Sequence是数据中一个特殊存放等差数列的表,该表受数据库系统控制,任何时候数据库系统都可以根据当前记录数大小加上步长来获取到该表下

Oracle SEQUENCE 详细说明

ORACLE  SEQUENCE ORACLE没有自增数据类型,如需生成业务无关的主键列或惟一约束列,可以用sequence序列实现. CREATE SEQUENCE语句及参数介绍: 创建序列:需要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, CREATE SEQUENCE [ schema. ]sequence [ { INCREMENT BY | START WITH } integer | { MAXVALUE integer | NOMAXVALUE

Oracle Sequence创建与使用

一.Sequence简介 Sequence是数据库系统按照一定的规则自动增加的数字序列,主要用于生成数据库数据记录.这个序列一般作为代理主键(因为不会重复). Sequence是数据中一个特殊存放等差数列的表,该表受数据库系统控制,任何时候数据库系统都可以根据当前记录数大小加上步长来获取到该表下一条记录应该是多少,这个表没有实际意义,常常用来做主键用.Sequence是数据库系统的特性,有的数据库有Sequence,有的没有.比如Oracle.DB2.PostgreSQL数据库有Sequence

ORACLE SEQUENCE 详解

1.    About Sequences(关于序列) 序列是数据库对象一种.多个用户可以通过序列生成连续的数字以此来实现主键字段的自动.唯一增长,并且一个序列可为多列.多表同时使用. 序列消除了串行化并且提高了应用程序一致性.(想象一下没有序列的日子怎么办?) 2.   Creating Sequences(创建序列) 前提:Prerequisites To create a sequence inyour own schema, you must have the CREATE SEQUEN

Oracle SEQUENCE 具体说明

ORACLE  SEQUENCE ORACLE没有自增数据类型,如需生成业务无关的主键列或惟一约束列,能够用sequence序列实现. CREATE SEQUENCE语句及參数介绍: 创建序列:须要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, CREATE SEQUENCE [ schema. ]sequence [ { INCREMENT BY | START WITH } integer | { MAXVALUE integer | NOMAXVALUE

基于Oracle Sequence的流水号生成规则

流水号在各种系统中随处可见,一般都是使用自增.年月日时分秒+自增.UUID等,要么纯数字,要么纯字母,这种流水号缺乏一定的辨识度. 下面为大家介绍一种具有辨识度的流水号的生成方式:领域或者应用的标识 + 表名的英文缩写(单词的第一个字母) + 年月日(或者年月日时分秒) + Oracle Sequence自增. 代码示例: package com.pab.bloan.order.service; /** * Created by */ public interface SequenceGener

Oracle Sequence中Cache与NoCache的区别;合适使用

Oracle在创建序列(sequence)时有个参数你可以选择cache或者nocache,下面来讲一下两者的区别: 先来看下创建sequence的语句: create sequence SEQ_ID  minvalue 1  maxvalue 99999999  start with 1  increment by 1  cache n  / nocache  --其中n代表一个整数,默认值为20order; 如果指定CACHE值,Oracle就可以预先在内存里面放置一些Sequence,这样