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 :不保证序列按请求顺序生成。

注:ORDER这个选项是对于并行系统而已确保sequence的in order,如果是单机sequence都是in order的。

 

例子:

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约束

时间: 2024-10-22 12:40:27

ORACLE SEQUENCE 详解的相关文章

Linux 自动备份oracle数据库详解_oracle

Linux 自动备份oracle数据: 曾经有个同事,来回操作开发和生产的数据库,结果误删了生产的数据库,那种心情我想不是一般人能理解的,虽然说oracle可以有方法还原,但并不是彻底的. 所以,在工作中,不管是开发还是维护,备份数据库是非常有必要. 简单实用的晚间自动备份数据库小案例 步骤一.创建备份脚本,暂且命名为orabak.sh #路径名,指定备份的路径 FILEPATH = /oracle/orabak #根据指定日期格式,定义备份数据库文件名 FILENAME = `date + %

oracle 临时表详解及实例_oracle

在Oracle8i或以上版本中,可以创建以下两种临时表: 1.会话特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> ) ON COMMIT PRESERVE ROWS:  2.事务特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> ) ON COMMIT DELETE ROWS: CRE

oracle flashback详解2

这部分的内容,其实早在10年年初就学习过,也记录了相关的笔记.但很多知识不用就慢慢被遗忘了.今天无意中听到同事在讨论问题:为什么删除了一个占用空间大的表后,表空间并没有释放呢? 职业的原因,自己在想Oracle Drop table的过程是怎么实现的,是不是要做个跟踪看下.后来想起在10g后,Oracle有了Flashback的功能,删除表的时候会先放在RecycleBin中,并不真正的物理删除,所以表空间dba_free_space是不是不会有变化? 今天重新翻了下之前的笔记,并做了试验,发现

使用 ODP.NET 访问 Oracle(.net如何访问Oracle)详解

1,什么是ODF .NE,?就是Oracle 为 .NET (ODP.NET) 专门编写了 Oracle Data Provider,一个用于 Microsoft .NET 环境下的 Oracle 数据访问 API . 详细解说 http://www.oracle.com/technetwork/cn/testcontent/o23odp-084525-zhs.html 对于官方的代码,已不存在了! ODP.NET你不需要安装Oracle,不需要配置oracle.key文件,不需要配置TnsNa

Oracle热备份详解

Oracle 热备份是指数据库处于open状态下,对数据库的数据文件.控制文件.参数文件.密码文件等进行一系列备份操作. 热备是基于用户管理备份恢复的一种方式,也是除了RMAN备份之外较为常用的一种备份方式. 一.热备的过程 冻结块头-->控制SCN在备份时不发生变化 进行物理拷贝 解冻块头-->让SCN可以变化(当对SCN解冻后,系统会自动更新SCN至最新的状态) 二.基于数据库的热备 alter database begin backup; 拷贝所有的datafile到备份目录 alter

Oracle分区方法详解

下面我分别对这四种分区方法的概念,他们的使用场景,以及各种分区方法做一个性能比较. 一.概念 1.Range Partitioning 这是最常用的一种分区方法,基于COLUMN的值范围做分区,最常见的是基于时间字段的数据的范围的分区,比如:对于SALE表,可以对销售时间按照月份做一个Range Partitioning.这种分区在数据仓库里用的比较多,以下是 CREATE STATMENT CREATE TABLE sales_range (salesman_id NUMBER(5), sal

GoldentGate Oracle to Oracle 初始化详解

一.安装GoldenGate[源端,目标端] 1.创建ogg目录 [root@source ~]# mkdir /DBSoft/ogg [root@source ~]# cd /DBSoft/ogg/ 2.解压缩ogg安装介质 [root@source ogg]# unzip /root/OGG_v11_for_ora11g_linux64.zip Archive: /root/OGG_v11_for_ora11g_linux64.zip inflating: ggs_Linux_x64_ora

oracle flashback详解3

原文转自:http://www.askmaclean.com/archives/why-flashback-log-smaller-than-redolog.html 为什么Flashback Log产生量要远少于Redo Log? 有同学提问关于闪回数据库日志为什么远少于redo log?     RVWR( Recovery Writer)每3s检查flashback generate buffer中的block before image的具体算法是如何的? 是否每一次block chang

Java下使用Oracle存储过程(详解)第1/3页_JSP编程

任何转载,请尊重版权.(作者:iihero on csdn) 一.如何创建java存储过程? 通常有三种方法来创建java存储过程. 1. 使用oracle的sql语句来创建: e.g. 使用create or replace and compile java source named "<name>" as 后边跟上java源程序.要求类的方法必须是public static的,才能用于存储过程. 复制代码 代码如下: SQL> create or replace