Oracle中 sequences(序列)介绍

Oracle提供了sequence对象,由系统提供自增长的序列号,用于生成数据库数据记录的自增长主键或序号的地方。如果当前的序列不存在,它会创建一个序列,如果存在,它首先要得到当前序列的最大值,然后再加一,实现自增长的功能。

建立序列命令

CREATE SEQUENCE [user.]sequence_name
[increment by n]
[start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue];
[NOCYCLE]  -- 

INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。

START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。

MAXVALUE:指定序列可生成的最大值。

NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。

MINVALUE:指定序列的最小值。

NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。

NOCYCLE:一直累加,不循环。

在PLSQL Developer中可以直接找Sequences,新建序列,如下:


需要注意的是,cache的作用是当大量语句发生请求,申请序列时,为了避免序列在运用层实现序列而引起的性能瓶颈。Oracle序列允许将序列提前生成 cache x个先存入内存,在发生大量申请序列语句时,可直接到运行最快的内存中去得到序列。但是如果设置了CACHE值,ORACLE将在内存里预先放置一些sequence,以使存取速度更快。cache里面的取完后,oracle自动再取一组到cache。 但是,使用cache可能会跳号, 当遇到数据库突然异常down掉(shutdown abort),cache中的sequence就会丢失. 
因此,推荐在create sequence的时候使用 nocache 选项。

修改序列命令
用户必须拥有ALTER ANY SEQUENCE 权限才能修改sequence. 可以alter除start至以外的所有sequence参数.
如果想要改变start值,必须 drop sequence 再 re-create.
语法如下:

ALTERSEQUENCE [user.]sequence_name
[INCREMENT BY n]
[MAXVALUE n| NOMAXVALUE ]
[MINVALUE n | NOMINVALUE];

当然,最方便的还是可以在PLSQL Developer中直接修改。可以修改未来序列值的增量;设置或撤消最小值或最大值;改变缓冲序列的数目;指定序列号是否是有序。

使用序列命令
sequence.CURRVAL    -- 返回 sequence的当前值 
sequence.NEXTVAL    -- 增加sequence的值,然后返回 sequence 值
[注意]
第一次NEXTVAL返回的是初始值;
随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。
CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。
一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。 
LAST_NUMBER 为最终序列号,也就是sequence游标当前所在的位置。
//get sequence last_number
SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME=TEST_SEQNAME
// NEXTVAL 使游标指向下一位(增一或减一)
SELECT SEQNAME.NEXTVAL FROM USER_SEQUENCES 得到下一位游标的值

删除序列命令
 DROP  SEQUENCE 序列名;

时间: 2024-12-27 02:30:54

Oracle中 sequences(序列)介绍的相关文章

ibatis的insert中使用序列

  Oracle中创建序列 create sequence MYDB_SEQUENCEincrement by 1 start with 1 nomaxvalue minvalue 1;   xml写法 <insert id="insert" parameterClass="Student">  <selectKey resultClass="String" keyProperty="mid">   S

oracle中的NVL,NVL2,NULLIF,COALESCE几个通用函数

Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简单介绍一下几个函数的用法. 在介绍这个之前你必须明白什么是oracle中的空值null 1.NVL函数 NVL函数的格式如下:NVL(expr1,expr2) 含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值. 例如: SQL> sel

ORACLE中序列-sequence的应用

oracle oracle中没有象Acces中自动编号的字段类型,所以在oracle中要想用一个字段自动增值,还比较麻烦,在此提供给大家一个方法,利用序列,来完成字段的自动增加,下边介绍一下怎么创建序列,使用序列,和删除序列. 1.创建序列--------------create sequence  create sequence  Seq_AutoID   //所起序列名叫 Seq_AutoID ,需要记住此序列名,以后方可调用 minvalue   1   //最小值从1开始 可以根据自己的

oracle中110个常用函数介绍_oracle

1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dual; A A ZERO SPACE --------- --------- --------- --------- 65 97 48 32 2. CHR 给出整数,返回对应的字符; SQL> select chr(54740) zhao,chr(65) chr65 from dual; ZH C --

Oracle中序列的使用例子

曾经在触发器中使用序列(SEQUENCE): create or replace trigger TRI_SUPPLIER before insert on SUPPLIER for each row begin select seq_supid.NEXTVAL into:new.supcode from dual; select seq_supid.CURRVAL into:new.supID from dual; end; 显然,忽略了并发,修改后如下: create or replace

Oracle中PL/SQL中if语句的写法介绍

以下是对Oracle中PL/SQL中if语句的写法进行了详细的分析介绍,需要的朋友可以过来参考下   复制代码 代码如下: /* If语句: 判断用户输入的数字. */ set serveroutput on --接收键盘输入 accept num prompt '请输入一个数字:'; declare   --将屏幕输入的数字付给变量   pnum number := # begin   if pnum = 0 then dbms_output.put_line('您输入的是0');   end

select-mybatis加oracle批量insert中的序列问题,可不可以用union做批量的sql语句--急

问题描述 mybatis加oracle批量insert中的序列问题,可不可以用union做批量的sql语句--急 <insert id="saveManyPopInfo" parameterType="java.util.List"> insert into popinfo (popid,popname,remark) select seq_popid.nextval,p.* from ( <foreach collection="lis

ssh框架中如何为oracle中对应的表创建hibernate序列,以达到新加主键自增的功能

问题描述 ssh框架中如何为oracle中对应的表创建hibernate序列,以达到新加主键自增的功能 解决方案 .hbm 文件 <id name="id" type="java.lang.String"> <column name="ID" length="32" /> <generator class="uuid.hex" /> </id>策略不一样<

oracle中动态SQL使用详细介绍_oracle

1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一种是后期联编(late binding),即SQL语句只有在运行阶段才能建立,例如当查询条件为用户输入时,那么Oracle的SQL引擎就无法在编译期对该程序语句进行确定,只能在用户输入一定的查询条件后才能提交给SQL引擎进行处理.通常,静态SQL采用前一种编译方式,而动态SQL采用后一种编译方式.