`

在oracle中实现自增功能

    博客分类:
  • sql
阅读更多
写道
先假设有这么一个表:


create table S_Depart (
DepartId INT not null,
DepartName NVARCHAR2(40) not null,
DepartOrder INT default 0,
constraint PK_S_DEPART primary key (DepartId)
);


在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
针对S_Depart创建的sequence如下:

create sequence S_S_DEPART
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
nocache;

一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的当前值
NEXTVAL=增加sequence的值,然后返回 sequence 值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL

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

可以看如下例子:


insert into S_Depart(departId,Departname,Departorder)values(S_S_Depart.Nextval,'12345',1);

SELECT empseq.currval FROM DUAL;

但是要注意的是:
- 第一次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防止这种情况。

2、Alter Sequence
你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .
Alter sequence 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXvalue 10000
CYCLE -- 到10000后从头开始
NOCACHE ;


影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。

可以很简单的Drop Sequence
DROP SEQUENCE order_seq;

一个简单的例子:
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,上面的代码就可以实现自动递增的功能了。

 

分享到:
评论

相关推荐

    oracle中设置自增主键参考

    然后,通过创建一个自增序列来实现自增功能。例如: ```sql CREATE TABLE example ( ID NUMBER(4) NOT NULL PRIMARY KEY, NAME VARCHAR(25), PHONE VARCHAR(10), ADDRESS VARCHAR(50) ); ``` 接下来,创建一个...

    oracle中如何实现ID自增

    通过上述步骤,我们就成功地在Oracle中实现了ID自增的功能。这种方法既简单又高效,适用于多种应用场景。 ### Oracle Sequence 的详细介绍 #### 1. 创建序列(Create Sequence) 在创建序列时,除了上面提到的...

    Oracle中主键自增实例

    综上所述,Oracle虽然不像某些数据库那样提供直接的主键自增功能,但通过序列、触发器等工具,可以灵活地创建满足需求的自增主键。在设计数据库时,应考虑性能、并发控制和最佳实践,确保系统的稳定性和高效性。

    Oracle插入数据时获取自增ID

    在Oracle数据库中,当需要实现类似其他数据库系统(如MySQL、SQL Server等)中的自动增长字段功能时,通常会采用序列(sequence)和触发器(trigger)来实现这一需求。下面将详细介绍如何通过序列和触发器实现在插入...

    ORACLE自增主键设置方法

    首先,我们需要创建一个序列来实现自增功能。序列是Oracle提供的一种自动产生数值的对象,可以用于为表中的某列自动分配唯一的数值。下面是一个创建序列的例子: ```sql CREATE SEQUENCE SEQ_TEST MINVALUE 1 -- ...

    创建oracle数据库中表的主键和自增

    在Oracle数据库中实现自增主键是一项常见但非常重要的功能。这不仅有助于确保数据的唯一性,还能简化开发过程中的某些环节,尤其是在需要自动增长的主键时。下面将详细介绍如何通过序列(Sequence)和触发器...

    Oracle建立自增主键

    ### Oracle建立自增主键 在Oracle数据库管理中,创建自增主键是一种常见...总之,通过组合使用`SEQUENCE`和`TRIGGER`,可以有效地在Oracle数据库中实现自增主键功能,从而简化数据库管理并提高数据的一致性与完整性。

    如何实现Oracle自增,序列,触发器都有

    在Oracle数据库中实现主键自增功能可以通过创建序列(sequence)与触发器(trigger)相结合的方式实现。这种方式不仅能够确保数据表中的主键唯一性,还能自动递增,极大地简化了开发人员的工作。 #### 创建Sequence...

    oracle通过触发器,实现序列自增

    本文将详细介绍如何通过触发器与序列相结合的方式,在Oracle数据库中实现记录的自增功能。 #### 一、理解Oracle序列 在开始之前,首先需要了解Oracle中的序列。序列是一个数据库对象,它能够生成连续的整数序列。...

    Oracle主键自增的办法

    在 Oracle 数据库中,与许多其他关系型数据库系统不同,它并没有内置的自动自增字段类型,例如 MySQL 的 `AUTO_INCREMENT` 或 SQL Server 的 `IDENTITY`。但是,Oracle 提供了序列(Sequences)和触发器(Triggers)...

    Oracle创建主键自增表(sql语句实现)及触发器应用

    这样,我们就成功地创建了一个具有主键自增功能的Oracle表,并通过触发器实现了插入数据时主键的自动递增。这种方法对于需要唯一标识符的场景非常有用,例如在用户管理、订单系统或其他需要跟踪唯一实体的系统中。

    MyBatis Oracle 自增序列的实现方法

    在Oracle数据库中,由于没有像MySQL的`auto_...通过以上配置,你就可以在MyBatis中成功实现Oracle的自增序列功能,让主键能够自动递增。这种方法不仅适用于插入操作,也可以方便地应用于更新等其他需要主键自增的场景。

    Oracle使用序列创建自增字段

    Oracle 数据库通过序列(Sequence)这一特性支持自增字段的实现。本文将详细介绍如何利用 Oracle 的序列功能来创建自增字段,并探讨其相关的配置选项及应用场景。 ### 创建序列 (Create Sequence) #### 基本语法与...

    oracle 主键自增 sequence

    通过上面的例子,我们可以看到如何在 Oracle 中使用 `Sequence` 来实现主键自增的功能。这种方法非常适用于那些需要唯一标识符但又没有内置自增功能的情况。`Sequence` 的灵活性也使得开发者可以根据实际需求来定制...

    Oracle里的自增字段设置

    在Oracle数据库中,自增字段的设置确实与...12c及更高版本提供了更直观、简洁的`IDENTITY`语法,而在旧版本中则需要依赖序列和触发器来模拟自增功能。根据你的具体环境和需求,你可以选择适合的方式来处理自增字段。

    Oracle9i中建立自增字段的最新办法

    通过以上步骤,我们就成功地在Oracle9i中模拟出了自增字段的功能。这个方法虽然比其他数据库系统的内置特性稍微复杂一些,但它提供了灵活性和控制力,可以满足各种自增需求。需要注意的是,Sequence和Trigger的使用...

    Oracle 实现类似SQL Server中自增字段的一个办法

    在SQL Server中,自增字段通常通过`IDENTITY`...通过这种方式,Oracle能够实现类似于SQL Server中的自增字段功能,尽管实现过程较为复杂。理解并熟练运用这些技术对于在Oracle环境中管理具有自增特性的数据至关重要。

    ORACLE实现字段自增示例说明

    通过以上方法,可以确保`SuperAdmin`表的`ID`字段在每次插入新记录时自动递增,从而实现类似于SQL Server等其他数据库中的自增字段功能。这种方式适用于需要唯一标识符的场景,如主键字段。在实际数据库设计中,务必...

    oracle自增序列

    在数据库应用中,序列是一种常用的数据对象,它能够自动产生唯一的数值,常用于实现表中的主键自增功能。Oracle数据库提供了强大的序列管理功能,可以方便地创建、管理和使用序列。本文将详细介绍如何在Oracle数据库...

    oracle 主键自增相关命令

    Oracle数据库并不直接支持像MySQL中的`AUTO_INCREMENT`功能,但可以通过创建序列来实现类似效果。例如,创建名为`class_seq`的序列,初始值为1,每次递增1,最大值为999999,不循环,也不缓存序列值: ```sql ...

Global site tag (gtag.js) - Google Analytics