`

ORACLE SEQUENCE的简单介绍

阅读更多
在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 创建自增字段方法-ORACLE SEQUENCE 的简单介绍 Oracle SEQUENCE 是一种特殊的数据库对象,用于生成一系列唯一的数值,通常用于主键或其他需要唯一标识的字段。下面将详细介绍 Oracle 创建自增字段方法-...

    Oracle sequence 重置(失效恢复)

    下面将详细介绍如何通过SQL脚本来重置Sequence,使其恢复正常功能。 ### SQL脚本实现 首先,我们定义了一个函数`func_getseq`,该函数接受一个表名作为参数,并返回该表主键的最大值。然后,我们使用一个PL/SQL块...

    Sequence简单介绍.pdf

    ### Sequence简单介绍 #### 序列(Sequence)概念解析及应用 序列(Sequence)是一种用于生成一系列数值的数据对象,常用于数据库系统中为主键提供自动递增的功能。本篇文章主要聚焦于Oracle数据库与SQL Server...

    Oracle创建自增字段–ORACLE SEQUENCE的简单使用介绍

    先假设有这么一个表: 代码... 在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 1、Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, CREAT

    oracle_sequence.rar_oracle

    同义词(Synonym)在Oracle中是一种数据库对象的别名,可以为序列创建同义词,使得在不同的模式或者远程数据库之间共享序列变得简单。例如: ```sql CREATE PUBLIC SYNONYM SEQ_PUBLIC FOR SCHEMA_NAME.SEQ_TEST; ``...

    sequence-generator:比oracle sequence更加强大的序列生成器,支持分布式环境,配合MHA可完美做到高可用,与spring无缝集成,使用非常简单可靠

    sequence-generator简介类似于oracle的sequence,但更加强大支持分布式环境下sequence的生成使用乐观锁和AtomicLong确保sequence的唯一性使用及其简单db scriptCREATE TABLE sequence_database.sequence ( name ...

    oracle 存储过程使用 sequence

    以下是一个简单的例子,展示了如何在存储过程中使用Sequence生成用户ID: ```plsql CREATE OR REPLACE PROCEDURE INSERT_USER ( p_username IN VARCHAR2, p_email IN VARCHAR2, p_user_id OUT NUMBER) AS BEGIN ...

    Oracle创建自增字段--ORACLE SEQUENCE的简单使用介绍

    本篇文章将详细介绍Oracle如何创建、使用、修改以及删除自增字段所用到的SEQUENCE。 首先,创建一个Oracle序列(SEQUENCE)可以使用`CREATE SEQUENCE`语句。例如,创建名为`S_S_DEPART`的序列: ```sql CREATE ...

    oracle sequence语句重置方介绍

    以下将详细介绍两种重置Oracle Sequence的方法。 方法一: ```sql DECLARE n NUMBER(10); tsql VARCHAR2(100); p_seqName varchar2(20); BEGIN p_seqName := 'SEQ_RUN_ID'; EXECUTE IMMEDIATE 'SELECT ' ...

    sqlserver实现oracle的sequence方法

    在SQL Server中,为了模拟Oracle的Sequence功能,我们需要利用数据库中的特定机制来生成唯一的序列号。Oracle的Sequence是一种对象,可以自动地返回一个唯一的整数序列,通常用于生成主键值。而在SQL Server中,我们...

    Oracle数据库基础教程:入门其实很简单

    - 开发工具:常用的Oracle开发工具介绍。 2. **Oracle+Hibernate应用实例**: - Hibernate简介:了解Hibernate框架的基本概念。 - Oracle与Hibernate集成:如何将Oracle数据库与Hibernate框架结合使用。 - 实例...

    oracle中如何实现ID自增

    ### Oracle Sequence 的详细介绍 #### 1. 创建序列(Create Sequence) 在创建序列时,除了上面提到的基本选项外,还有一些其他选项可以帮助更好地管理序列。 **示例命令:** ```sql CREATE SEQUENCE emp_...

    oracle odi 入门

    2. 完整的简单例子:这部分内容通过一系列步骤介绍了创建一个简单的ODI集成项目,从环境准备、资料库创建、物理和逻辑体系结构搭建,到创建项目、模型、接口、包、方案,并最终运行接口和监控会话状态。 3. 最常用...

    使用简单的SQL语句实现的Oracle数据库分页技术

    本文将介绍一种利用简单SQL语句来实现Oracle数据库分页的方法,这种方法不依赖于复杂的PL/SQL过程或函数,而是通过SQL查询的巧妙设计来达到目的。 ### 分页公式的原理 在Oracle中,分页查询通常涉及到对结果集进行...

    mysql生成oracle序列

    在数据库领域中,不同数据库管理系统(DBMS)之间存在显著差异,比如Oracle与MySQL在处理序列(sequence)的方式上就有本质的不同。Oracle提供了内置的支持来管理自动递增的数字序列,而MySQL并没有原生支持序列这一特性...

    在hibernate中实现oracle的自动增长

    在Oracle中创建一个序列(sequence)非常简单,只需要执行一条SQL语句即可。例如,为`DEPARTMENT`表创建一个名为`DEPARTMENT_ID_SEQ`的序列,其最小值设为10000,最大值设为极大的数字,增量为1,并且不循环: ```sql...

Global site tag (gtag.js) - Google Analytics