ORACLE SEQUENCE 详解

来源:互联网 发布:js导入导出excel数据 编辑:程序博客网 时间:2024/04/30 07:39

1.    About Sequences(关于序列)

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

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

2.  Creating Sequences(创建序列)

前提:Prerequisites

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

To create a sequence inanother user's schema, you must have theCREATEANYSEQUENCEsystem 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 theALTERobject privilege on

the sequence, or you must have theALTERANYSEQUENCEsystemprivilege.

修改自己模式序列需要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 SEQUENCEsystem privilege.

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

语法:

例子:

DROP SEQUENCE oe.customers_seq; 

5.   NEXTVAL and CURRVAL的使用限制

CURRVALand NEXTVALcan be used in the following places:

·        VALUESclause of INSERTstatements

·        TheSELECTlist of a SELECTstatement

·        TheSETclause of an UPDATEstatement

CURRVALand NEXTVALcannot be used in these places: 不能用于以下场景

·        A subquery子查询

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

·        ASELECTstatement with the DISTINCToperator distinct关键字查询

·        ASELECTstatement with a GROUPBYor ORDERBYclauseorder by查询语句

·        ASELECTstatement that is combined with another SELECTstatement with the UNION,INTERSECT, orMINUSset operatorunion, interest,minus操作符

·        TheWHEREclause of a SELECTstatement用在where条件中

·        DEFAULTvalue of a column in a CREATETABLEor ALTERTABLEstatement 列的默认值

·        The condition of aCHECKconstraint   check约束

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

Dylan    Presents.

0 0
原创粉丝点击