`

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块...

    ORACLE SEQUENCE的简单介绍

    ### ORACLE SEQUENCE 的详细介绍与应用 #### 一、概述 在数据库开发和管理中,自动编号是一项常用的功能。在 SQL Server 中,我们可以通过自增字段来实现这一功能。而在 Oracle 数据库中,则使用了一个名为 **...

    Sequence简单介绍.pdf

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

    oracle_sequence.rar_oracle

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

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

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

    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 ...

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

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

    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 ' ...

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

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

    sqlserver实现oracle的sequence方法

    一个简单的实现方式是创建一个包含四个字段的表,如"AllSequence",字段包括:名称、起始值、递增值和当前值。每当需要一个新的序列值时,从表中读取并更新当前值。然而,这种方法在高并发环境下可能会遇到问题,...

    oracle odi 入门

    Oracle ODI(Oracle Data Integrator)是一款由Oracle公司推出的高效数据集成工具,它是基于Sunopsis公司Active Integration Platform的产品,自2006年10月被Oracle收购后,整合进了Oracle Fusion Middleware产品线...

    oracle中如何实现ID自增

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

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

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

    mysql生成oracle序列

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

    超详细Oracle教程

    - **简单子查询**:介绍单行子查询和多行子查询的用法。 - **嵌套子查询**:探讨如何在一个查询中嵌套另一个查询,以及其在实际应用中的灵活性。 - **WITH子句**:讲解WITH子句在复杂查询中的作用,以及如何使用它...

    在hibernate中实现oracle的自动增长

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

Global site tag (gtag.js) - Google Analytics