ORACLE SEQUENCE 详解

1.    About Sequences(关于序列)

序列是数据库对象一种。多个用户可以通过序列生成连续的数字以此来实现主键字段的自动、唯一增长,并且一个序列可为多列、多表同时使用。

序列消除了串行化并且提高了应用程序一致性。(想象一下没有序列的日子怎么办?)

2.   Creating Sequences(创建序列)

前提:Prerequisites

To create a sequence inyour own schema, you must have the CREATE SEQUENCE system
privilege. 在自己模式下创建序列需要create sequence权限

To create a sequence inanother user‘s schema, you must have the CREATE ANY SEQUENCE system
privilege. 在其他用户模式下创建序列需要create any sequence权限。

语法:Syntax

如果不加条件语句,默认创建的序列格式如下:

-- Create sequence

create sequence SEQ_T

minvalue  1

maxvalue  999999999999999999999999999

start  with  1

increment  by  1

cache  20;

语义Semantics:

INCREMENT BY指定序列增长步长。可以为正(升序)、负整数(降序),但不能为0。最高精度28。

START WITH: 指定序列起始数。默认为序列最小值。

MAXVALUE :指定序列最大值。最大28位。必须大于等于起始值且大于等于序列最小值。

NOMAXVALUE:  无最大值(实际为10^27或-1)。default

MINVALUE :指定序列最小值。

NOMINVALUE  :无最小值(实际为1或-10^26)。Default

CYCLE  :指定序列达到最大值或最小值后继续从头开始生成。

NOCYCLE :不循环生成。Default.

CACHE :指定数据库内存中预分配的序列值个数,以便快速获取。最小cache值为2。

Cache参数最大值为:

(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)

注意1:如果系统发生故障,所有缓存的没有被DML语句使用并提交的序列值将丢失。潜在丢失值数量等于cache的数量。

NOCACHE  :不指定缓存数,默认缓存20

ORDER :指定order条件保证序列按请求顺序生成。此条件适用于RAC环境。

NOORDER :不保证序列按请求顺序生成。

 

例子:

CREATE SEQUENCE customers_seq
 START WITH     1000
 INCREMENT BY   1
 NOCACHE
 NOCYCLE;

 

注意2:带有cycle条件序列当达到最大值后,下一个值从最小值minvalue开始循环!

CREATE  SEQUENCE seq1

START  WITH  200

INCREMENT  BY  10

MAXVALUE  200

CYCLE

NOCACHE;

SELECT  seq1.nextval   FROM dual;

结果:1

3.   ALTER SEQUENCE(修改序列)

 

前提:

The sequence must be in your own schema, or youmust have the ALTER object
privilege on

the sequence, or you must have the ALTER ANY SEQUENCE systemprivilege.

修改自己模式序列需要alter object权限,修改其他模式序列需要alter any sequence权限。

语法:

 

语义:

1)如果想以不同的数字重新开始序列,必须删除重建。

SQL> alter sequence seq_t start with 2;

alter sequence seq_t start with 2

*

ERROR at line 1:

ORA-02283: cannot alter starting sequencenumber

2)修改的maxvalue必须大于序列当前值。

SQL> alter sequence seq_t maxvalue 1;

alter sequence seq_t maxvalue 1

*

ERROR at line 1:

ORA-04004: MINVALUE must be less than MAXVALUE

例子:

ALTER SEQUENCE customers_seq 
   MAXVALUE 1500;

 

ALTER SEQUENCE customers_seq 
   CYCLE
   CACHE 5; 

 

4.   DROP SEQUENCE(删除序列)

前提:

Thesequence must be in your own schema or you must have the DROP ANY SEQUENCE system privilege.

删除序列必须要有drop  any  sequence权限

 

语法:

 

例子:

DROP SEQUENCE oe.customers_seq; 

 

5.    NEXTVAL and CURRVAL的使用限制

CURRVAL and NEXTVAL can
be used in the following places:

·        VALUES clause of INSERT statements

·        The SELECT list of a SELECT statement

·        The SET clause of an UPDATE statement

CURRVAL and NEXTVAL cannot
be used in these places: 不能用于以下场景

·        A subquery 子查询

·        A view query or materialized view query 视图或物化视图查询

·        A SELECT statement with the DISTINCT operator 含distinct关键字查询

·        A SELECT statement with a GROUP BY or ORDER BY clause带order
by 查询语句

·        A SELECT statement that is combined with
another SELECT statement with the UNION, INTERSECT,
or MINUS set operator含union, interest,minus操作符

·        The WHERE clause of a SELECT statement用在where条件中

·        DEFAULT value of a column in a CREATE TABLE or ALTER TABLE statement 列的默认值

·        The condition of a CHECK constraint   check约束

 

 

 

 

 

 

 

 

 --------------------------------------

Dylan    Presents.

ORACLE SEQUENCE 详解

时间: 2024-11-02 12:45:25

ORACLE SEQUENCE 详解的相关文章

oracle 序列 详解

序列: 是oacle提供的用于产生一系列唯一数字的数据库对象. l  自动提供唯一的数值 l  共享对象 l  主要用于提供主键值 l  将序列值装入内存可以提高访问效率 创建序列: 1.  要有创建序列的权限 create sequence 或 create any sequence 2.  创建序列的语法 CREATE SEQUENCE sequence  //创建序列名称        [INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1

Oracle序列号详解

例1:创建序列: CREATE SEQUENCE ABC INCREMENT BY 1 START WITH 1 MAXVALUE 9999999999 NOCYCLE NOCACHE; 语法详解 CREATE SEQUENCE 序列名 [INCREMENT BY n] --1. [START WITH n] --2. [{MAXVALUE/MINVALUE n|NOMAXVALUE}] --3. [{CYCLE|NOCYCLE}] --4. [{CACHE n|NOCACHE}]; --5.

【Oracle】详解Oracle中的序列

序列: 是oacle提供的用于产生一系列唯一数字的数据库对象. 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效率 创建序列: 1.  要有创建序列的权限 create sequence 或 create any sequence 2.  创建序列的语法 CREATE SEQUENCE sequence  //创建序列名        [INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1        [STAR

问题:Oracle出发器;结果:1、Oracle触发器详解,2、Oracle触发器示例

ORACLE触发器详解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INSTEAD OF)触发器 8.2.3 创建系统事件触发器 8.2.4 系统触发器事件属性 8.2.5 使用触发器谓词 8.2.6 重新编译触发器 8.3 删除和使能触发器 8.4 触发器和数据字典 8.5   数据库触发器的应用举例 触发器是许多关系数据库系

Oracle SGA详解

SGA(SYSTEM Global Area )系统全局区 l 数据高速缓存 在Oracle进行数据处理的过程中,代价最昂贵的就是物理 I/O操作了.同样的数据从内存中得到要比从磁盘上读取快的多.因此,优化Oracle的一个重要的目标就是尽可能的降低物理 I/O操作. Oracle的 Buffer Cache用于缓存从磁盘中读取的数据,当 Oracle需要查找某些信息的时候,首先会在 BufferCache中寻找,如果找到了,则直接将结果返回.如果找不到,则需要对磁盘进行扫描, Oracle将在

Oracle ROWID详解

1.ROWID定义 ROWID:数据库中行的全局唯一地址 对于数据中的每一行,rowid伪列返回行的地址.rowid值主要包含以下信息: 对象的数据对象编号 该行所在的数据文件中的数据块 该行中数据块的位置(第一行是0) 数据行所在的数据文件(第一个文件是1).该文件编号是相对于表空间. 通常来说,一个rowid值唯一标识数据中的一行.然而,存储在同一聚簇中不同的表可以有相同的rowid. 2.扩展ROWID 从Oracle 8i开始使用扩展rowid标识行物理地址 扩展rowid使用base6

JAVA通过JDBC连接Oracle数据库详解【转载】

JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.html Java连接Oracle步骤: 1.注册加载驱动 驱动名:DRIVER="oracle.jdbc.driver.OracleDriver"; Class.forName("驱动类名"); 2.获得连接 数据库地址: URL="jdbc:oracle:thi

【转载】oracle 分区表详解

一.分区表的概述:     Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具.     分区功能能够将表.索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区.每个分区有自己的名称,还可以选择自己的存储特性.从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使

oracle权限详解

一.权限分类:系统权限:系统规定用户使用数据库的权限.(系统权限是对用户而言). 实体权限:某种权限用户对其它用户的表或视图的存取权限.(是针对表或视图而言的). 二.系统权限管理:1.系统权限分类:DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构. RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构. CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构. 对于普通用户:授予connec