`
gaoyu
  • 浏览: 274741 次
  • 来自: 云南大理
社区版块
存档分类
最新评论

ORACLE序列的使用(oracle sequence)

 
阅读更多

关于Oracle的序列(Sequence)使用序列是一数据库对象,利用它可生成唯一的整数。一般使用序列自动地生成主键值。对我们程序员来讲,精力时间有限,我们只学最有用的知识。大家请看:
  1) 建立序列命令
  CREATE SEQUENCE [user.]sequence_name
  [increment by n]
  [start with n]
  [maxvalue n | nomaxvalue]
  [minvalue n | nominvalue];
  [NOCYCLE]  --
  INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0.序列为升序。忽略该子句时,缺省值为1.
  START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
  MAXVALUE:指定序列可生成的最大值。
  NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1.
  MINVALUE:指定序列的最小值。
  NOMINVALUE:为升序指定最小值为1.为降序指定最小值为-1026.
  NOCYCLE:一直累加,不循环
  2) 更改序列命令
  ALTERSEQUENCE [user.]sequence_name
  [INCREMENT BY n]
  [MAXVALUE n| NOMAXVALUE ]
  [MINVALUE n | NOMINVALUE];
  修改序列可以:修改未来序列值的增量。
  设置或撤消最小值或最大值。
  改变缓冲序列的数目。
  指定序列号是否是有序。
  注意:
  1,第一次NEXTVAL返回的是初始值
  2,可以alter除start至以外的所有sequence参数。如果想要改变start值,必须 drop sequence 再 re-create .
  3) 删除序列命令
  DROP SEQUENCE [user.]sequence_name;
  用于从数据库中删除一序列。
  4)牛刀小试
  4.1)创建一个序列号的语句:
  -- Create sequence
  create sequence NCME_QUESTION_SEQ
  minvalue 1
  maxvalue 999999999999
  start with 1
  increment by 1
  nocache;
  //////////////////////////////
  4.2)SQL中取序列号的用法:
  SELECT NCME_QUESTION_SEQ.nextval FROM dual
  SELECT NCME_QUESTION_SEQ.CURRVAL FROM dual
  SELECT NCME_QUESTION_SEQ.nextval FROM dual SELECT NCME_QUESTION_SEQ.CURRVAL FROM dual
  注意:在使用序列的时候,有时需要有用户名,就像这样:
  insert into system.CONSERVATOR(CONSERVATORNAME,CONPASS,CONTRUENAME,CONSEX,CONID)values('JG','123456','000',0, system.CONID.nextval);
-------------------------------------------------------------------------end---------------------

 

ORACLE序列的使用


1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
    INCREMENT BY 1 -- 每次加几个
    START WITH 1    -- 从1开始计数
    NOMAXVALUE      -- 不设置最大值
    NOCYCLE         -- 一直累加,不循环
    CACHE 10
    NOORDER;     --并行时取得序列的顺序

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

可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- INSERT语句的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;

序:
CREATE SEQUENCE command

PURPOSE:
    To create a sequence. A sequence is a database object from which
    multiple users may generate unique integers. You can use sequences
    to automatically generate primary key values.

SYNTAX:

CREATE SEQUENCE [schema.]sequence
    [INCREMENT BY integer]
    [START WITH integer]
    [MAXVALUE integer | NOMAXVALUE]
    [MINVALUE integer | NOMINVALUE]
    [CYCLE | NOCYCLE]
    [CACHE integer | NOCACHE]
    [ORDER | NOORDER]

where:

schema
    is the schema to contain the sequence. If you omit schema, Oracle
    creates the sequence in your own schema.

sequence
    is the name of the sequence to be created.

INCREMENT BY
    specifies the interval between sequence numbers. This value can be
    any positive or negative Oracle integer, but it cannot be 0. If
    this value is negative, then the sequence descends. If the
    increment is positive, then the sequence ascends. If you omit this
    clause, the interval defaults to 1.

MINVALUE
    specifies the sequence's minimum value.

NOMINVALUE
    specifies a minimum value of 1 for an ascending sequence or -10
    for a descending sequence.

    The default is NOMINVALUE.

MAXVALUE
    specifies the maximum value the sequence can generate.

NOMAXVALUE
    specifies a maximum value of 10
    for a descending sequence.

The default is NOMAXVALUE.

START WITH
    specifies the first sequence number to be generated. You can use
    this option to start an ascending sequence at a value greater than
    its minimum or to start a descending sequence at a value less than
    its maximum. For ascending sequences, the default value is the
    sequence's minimum value. For descending sequences, the default
    value is the sequence's maximum value.

CYCLE
    specifies that the sequence continues to generate values after
    reaching either its maximum or minimum value. After an ascending
    sequence reaches its maximum value, it generates its minimum value.
    After a descending sequence reaches its minimum, it generates its
    maximum.

NOCYCLE
    specifies that the sequence cannot generate more values after
    reaching its maximum or minimum value.

    The default is NOCYCLE.

CACHE
    specifies how many values of the sequence Oracle preallocates and
    keeps in memory for faster access. The minimum value for this
    parameter is 2. For sequences that cycle, this value must be less
    than the number of values in the cycle.

NOCACHE
    specifies that values of the sequence are not preallocated.

    If you omit both the CACHE parameter and the NOCACHE option, Oracle
    caches 20 sequence numbers by default. However, if you are using
    Oracle with the Parallel Server option in parallel mode and you
    specify the ORDER option, sequence values are never cached,
    regardless of whether you specify the CACHE parameter or the NOCACHE
    option.

ORDER
    guarantees that sequence numbers are generated in order of request.
    You may want to use this option if you are using the sequence
    numbers as timestamps. Guaranteeing order is usually not important
    for sequences used to generate primary keys.

NOORDER
    does not guarantee sequence numbers are generated in order of
    request.

    If you omit both the ORDER and NOORDER options, Oracle chooses
    NOORDER by default. Note that the ORDER option is only necessary to
    guarantee ordered generation if you are using Oracle with the
    Parallel Server option in parallel mode. If you are using exclusive
    mode, sequence numbers are always generated in order.

PREREQUISITES:
    To create a sequence in your own schema, you must have CREATE
    SEQUENCE privilege.

    To create a sequence in another user's schema, you must have CREATE
    ANY SEQUENCE privilege. If you are using Trusted Oracle in DBMS MAC
    mode, your DBMS label must dominate the creation label of the owner
    of the schema to contain the sequence.


example

create sequence seqTest
increment by 1
start with 0
maxvalue 10000
minvalue 0
nocache
cycle
noorder;

select seqTest.nextval from dual;
select seqTest.currval from dual;

alter sequence seqTest
increment by 5;

drop sequence seqTest;

分享到:
评论

相关推荐

    Oracle sequence 重置(失效恢复)

    **Oracle Sequence** 是一种数据库对象,用于生成连续的整数序列。它可以被用来作为表中某一列的自动增长字段,例如主键ID。Sequence的主要优点是简单易用且性能高效。 #### 二、Sequence失效的原因 1. **数据迁移...

    oracle 不用新建序列 重置序列(从1开始增长)

    本文将详细介绍如何在不新建序列的情况下,实现Oracle序列的重置,让其从1开始增长。这种方法通过编写PL/SQL过程来动态调整序列的增量,从而达到重置的目的。 ### Oracle序列重置方法 首先,我们需要理解Oracle...

    java通过Mysql实现类似oracle序列功能序列.rar

    通过以上步骤,你可以使用Java和MySQL实现一个类似Oracle序列的功能,满足业务需求。请注意,这种方法可能不如Oracle的序列功能那么高效,但在没有内置序列功能的MySQL中,这是一种可行的解决方案。

    批量修改Oracle序列值的存储过程

    批量修改Oracle序列值的需求可能出现在数据迁移、恢复或测试环境中,确保序列与实际数据匹配。这篇博客分享的是一个自定义的存储过程,用于批量修改Oracle序列的当前值(CURRENT VALUE)。 首先,我们需要理解...

    mysql生成oracle序列

    ### MySQL生成Oracle序列知识点 #### 一、背景与概述 在数据库领域中,不同数据库管理系统(DBMS)之间存在显著差异,比如Oracle与MySQL在处理序列(sequence)的方式上就有本质的不同。Oracle提供了内置的支持来管理...

    oracle序列创建、修改、删除

    在本篇中,我们将深入探讨Oracle序列的创建、修改和删除。 ### 1. 序列的创建 创建序列的基本语法如下: ```sql CREATE SEQUENCE sequence_name START WITH n -- 起始值 INCREMENT BY n -- 增量值 MINVALUE n ...

    oracle导出序列

    本文将深入探讨如何使用PL/SQL工具来导出Oracle序列,并详细阐述相关的步骤。 首先,让我们了解Oracle序列的基本概念。序列由一系列连续的整数组成,可以设置起始值、增量和最大值等属性。创建序列的基本语法如下:...

    oracle中的sequence实现主键增长

    Oracle中的Sequence是数据库管理系统提供的一种机制,用于生成序列化的整数,通常用于主键或唯一标识符,确保数据的唯一性和有序性。在Oracle中,Sequence不同于其他数据库系统的自增字段,例如SQL Server中的`...

    oracle_sequence.rar_oracle

    创建Oracle序列使用CREATE SEQUENCE语句。例如,以下语句创建了一个名为"SEQ_TEST"的递增序列,初始值为1,每次增长1: ```sql CREATE SEQUENCE SEQ_TEST START WITH 1 INCREMENT BY 1; ``` 你可以根据需求调整序列...

    oracle序列主键自增长

    本文将深入探讨Oracle序列主键自增长的工作原理、创建方法以及如何在表中应用。 **1. Oracle序列(Sequences)基础** Oracle序列是一个数据库对象,它可以生成一系列唯一的数字,这些数字可以被用作表的主键。序列...

    分享ORACLE SEQUENCE跳号总结

    在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢?  事务回滚引起的跳号  不管序列有...

    Oracle数据库中序列的使用

    ### Oracle数据库中序列的使用 在Oracle数据库管理中,序列是一种非常实用的对象,它能够自动生成唯一的数值。这种特性使得序列在很多应用场景中都极为重要,比如为表中的记录自动分配唯一标识符(如主键)。本文将...

    oracle 主键自增 sequence

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

    oracle索引、序列和权限设置

    ### 二、Oracle序列 序列是Oracle提供的一种自动生成唯一数值的机制,常用于为主键或需要唯一标识符的列自动分配值。在实验中,虽然没有明确展示序列的创建与使用,但可以利用`CREATE SEQUENCE`语句来创建一个序列...

    详解Oracle序列和触发器的使用

    **一、Oracle序列** 序列是一种特殊类型的数据库对象,它可以生成唯一的整数序列,常用于为数据库表的主键字段提供自动递增的值。序列的主要属性包括: 1. **INCREMENT BY**:指定序列值每次增长或减少的量。默认...

    oracle中sequence介绍及应用

    在Oracle数据库中,Sequence是一种用于自动产生数值序列的对象。它可以生成连续的整数或者非连续的整数序列,并且可以根据需求进行递增或递减。Sequence常用于为表中的某列自动生成唯一的主键值或者作为流水号使用。...

    Oracle 序列

    Oracle序列是数据库中用于生成唯一标识符的一种机制,它们在数据表中经常被用来作为主键或外键,确保数据的唯一性和完整性。在Oracle数据库系统中,序列(Sequences)提供了一种自动递增或递减数值的方式,这对于...

    Oracle使用序列创建自增字段

    ### Oracle 使用序列创建自增字段 在数据库设计与开发中,自增字段是十分常见的需求之一,尤其是在需要为每一行记录自动分配一个唯一编号的情况下。Oracle 数据库通过序列(Sequence)这一特性支持自增字段的实现。...

    sqlserver中创建类似oracle序列的存储过程

    - **使用存储过程**:调用 `getSequence` 存储过程,并传入最大值参数(如 1000),最后查询 `sequencetable` 表中的最大序列值以验证结果。 #### 注意事项 - 在实际应用中,可能还需要考虑并发问题,因为多个用户...

    ORACLE SEQUENCE的简单介绍

    为了在 Oracle 中使用 Sequence,首先需要确保拥有相应的权限,通常是 `CREATE SEQUENCE` 或者 `CREATE ANY SEQUENCE` 权限。创建 Sequence 的基本语法如下: ```sql CREATE SEQUENCE sequence_name INCREMENT BY ...

Global site tag (gtag.js) - Google Analytics