设为首页 收藏本站
查看: 745|回复: 0

[经验分享] ORACLE SEQUENCE 详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-11 08:48:55 | 显示全部楼层 |阅读模式
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
Center.jpg
如果不加条件语句,默认创建的序列格式如下:
-- 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权限。

语法:
Center.jpg
语义:

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权限

语法:
Center.jpg
例子:

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





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-21981-1-1.html 上篇帖子: ORACLE not available 下篇帖子: oracle instant client,tnsping,tnsnames.ora和ORACLE_HOME
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表