在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;
一旦定义了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 emp VALUES
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);
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;
分享到:
相关推荐
Oracle 创建自增字段方法-ORACLE SEQUENCE 的简单介绍 Oracle SEQUENCE 是一种特殊的数据库对象,用于生成一系列唯一的数值,通常用于主键或其他需要唯一标识的字段。下面将详细介绍 Oracle 创建自增字段方法-...
3. **定义格式**:在“Number sequence code”字段中,选择刚刚创建的Code。接着,设置Prefix和Suffix,例如Prefix为“INV-”,Suffix为空。 4. **配置递增方式**:选择递增方式,如“连续”(每个新记录都会递增1...
在Oracle数据库中,`sequence`机制是一种自动生成唯一数值序列的方法,常用于为主键字段提供连续的整数值。它类似于其他数据库系统中的自动增长字段,但在Oracle中更加灵活可控。本文将详细介绍`sequence`的基本概念...
它可以被用来作为表中某一列的自动增长字段,例如主键ID。Sequence的主要优点是简单易用且性能高效。 #### 二、Sequence失效的原因 1. **数据迁移:** 当数据从一个环境迁移到另一个环境时,如果只是简单地复制了...
要求:查询一个字段的数据,将每个数据拆分,取第一个字符,将第一个字符遍历出来,替换到另一个字段里面
- **注意**: 第一次调用`NEXTVAL`时返回的是起始值,之后的调用则会根据`INCREMENT BY`字段自动递增。 - **SQL Server端**:在SQL Server中,虽然没有直接的`Sequence`概念,但可以使用`IDENTITY`属性来模拟自增列...
通过以上介绍,可以看出DB2提供了多种方式来实现字段的自增长,包括直接使用`GENERATED ALWAYS AS IDENTITY`特性以及通过触发器和Sequence实现。选择哪种方式取决于具体的应用场景和需求。对于大多数情况来说,直接...
在Oracle中,Sequence不同于其他数据库系统的自增字段,例如SQL Server中的`IDENTITY`属性。Sequence可以在不依赖于任何表的情况下独立创建,并且可以在插入记录时动态地获取下一个可用的序列号。 以下是对Sequence...
在内容部分,文档首先列举了多种协议类型,这些协议类型是通过EtherType字段来识别的。EtherType字段在以太网帧中标识上层协议的类型,比如IPv4、IPv6或者ARP等。之后,文档引入了Python代码的片断,显示了一段类...
标题中的"apb_sequence_item.rar"表明这是一个与Advanced Peripheral Bus(APB)协议相关的序列化项目,可能包含用于验证目的的随机化字段。APB是一种常见的总线接口标准,常用于连接微处理器和外围设备,它在系统级...
在Oracle数据库中,由于没有像SQL Server那样内置的自增字段功能,我们通常需要通过创建序列(SEQUENCE)和触发器(TRIGGER)来模拟这一效果。以下将详细讲解如何在Oracle中创建自增字段sequence,并讨论其相关知识...
首先创建一个 Sequence,然后为表创建一个 BEFORE INSERT 触发器,该触发器将在每次插入新记录时自动设置主键字段。 ```sql CREATE SEQUENCE a_sequence START WITH 1 INCREMENT BY 1; CREATE TABLE t (n ...
CREATE SEQUENCE SEQ_EXCELFILE_LINE MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 20; ``` 最后,需要创建一个触发器(Triggers)来实现字段值自动加 1。在 Oracle 数据库中,触发器是一种特殊的数据库对象,用于...
2. **使用Sequence**:在实体类或者DAO层,你可以通过调用数据库的序列函数(如`seq_name.nextval`)来获取序列的下一个值,将其插入到需要唯一ID的字段。 3. **创建Trigger**:在JDeveloper中,可以使用DDL或可视...
为了使用 `Sequence` 为表中的主键字段赋值,可以通过以下步骤进行: 1. **创建表**: ```sql CREATE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME VARCHAR(25), PHONE VARCHAR(10), ADDRESS ...
Oracle 数据库不直接支持自增字段,但可以通过序列(Sequence)和触发器(Trigger)的组合来实现。步骤如下: 1. **创建序列**: ```sql CREATE SEQUENCE T1_ID_SEQ INCREMENT BY 1 START WITH 1 NO MAXVALUE ...
### Oracle 创建触发器与创建递增字段 #### 一、Oracle数据库中的递增字段实现方法 在Oracle数据库中,为了实现自动递增的功能,我们通常会使用`SEQUENCE`对象来实现这一目标。序列(SEQUENCE)是Oracle提供的用于...
primary key(id) //id为主键,下面的方法把它设为自增字段 ) 1、建立自增序列TEMP_TEST_IDADD,命名任意,从1开始,每次加1 CREATE SEQUENCE TEMP_TEST_IDADD INCREMENT BY 1 START WITH 1; 2、在表...
### 主键生成器sequence在Oracle中的应用 #### 一、概述 在数据库设计与开发过程中,经常需要为数据表中的某列(通常是主键)自动分配一个唯一且递增的值,以确保每一行记录的独特性。Oracle数据库提供了一种非常...