oracle对象之序列

是数据库对象,利用它可生成唯一的整数,序列对我们来说是比较重要的一个对象。

MySQL的ID(主键)是可以自增长的

但是Oracle没有这个东西,而Oracle咱们怎么来生成自动的id呢,就需要使用序列

一般使用序列自动地生成表主键值或唯一键值。

注:序列不属于任何一张表。因为它和表是同级的对象。

一般来说,一个序列对应一张表

语法:

CREATE SEQUENCE [user.]sequence_name
[increment by n]
[start with n]
[maxvalue n|]
[minvalue n ];
[cache]

     [NOCYCLE|CYCLE]

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

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

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

     MINVALUE:指定序列的最小值
   NOCYCLE:一直累加,不循环

      CYCLE:累加到最大值循环

--查看数据库中当前用户创建的所有序列:
select SEQUENCE_NAME from user_sequences;

方式二:使用工具创建序列

注:生成序列前需要给咱们的用户开放创建序列的权限

第一步:登录plsql,左边找到Sequences,右键新建,如下

使用序列生成主键

序列的值:

--currval :返回序列的当前值

--nextval 返回序列首次引用时的起始值,以后使用nextval的引用将使用increment by 子句增加序列值,并返回新值。

查看当前序列的方式:select stu_seq.currval from dual

使用序列的方式:select stu_seq.nextval from dual

我们以后生成主键就可以直接这样写:

insert into employees(employees_id,last_name….)

       values(emp_seq.nextval,’zhang’……)

 2、修改序列语法:

ALTER SEQUENCE 序列名 
  [INCREMENT BY n] 
  [{MAXVALUE/ MINVALUE n|NOMAXVALUE}] 
  [{CYCLE|NOCYCLE}] 
  [{CACHE n|NOCACHE}];

*不能修改序列的初始值

3、删除序列语法:

DROP SEQUENCE 序列名;

hibernate使用oracle:

采用数据库提供的sequence机制生成主键,需要数据库支持sequence。如oralce、DB、SAP DB、PostgerSQL、McKoi中的sequence。MySQL这种不支持sequence的数据库则不行(可以使用identity)。

<generator class="sequence">

<param name="sequence">hibernate_id</param>

</generator>

<param name="sequence">hibernate_id</param> 指定sequence的名称

Hibernate生成主键时,查找sequence并赋给主键值,主键值由数据库生成,Hibernate不负责维护,使用时必须先创建一个sequence,如果不指定sequence名称,则使用Hibernate默认的sequence,名称为hibernate_sequence,前提要在数据库中创建该sequence。

特点:只能在支持序列的数据库中使用,如Oracle。

原文地址:https://www.cnblogs.com/spdboke/p/6867586.html