ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Oracle 序列学习与使用总结

2022-08-22 01:04:30  阅读:188  来源: 互联网

标签:总结 seqName NEXTVAL 生成 序列 使用 Oracle SELECT


Oracle序列学习与使用总结

by:授客 QQ:1033553122

简述

序列是oracle提供的用于生成一系列数字的数据库对象,序列会自动生成顺序递增的序列号,可用于提供唯一的自动递增主键。序列和视图一样,并不占用实际的存储空间,只是在数据字典中保存他的定义信息。

创建序列

当创建序列时必须拥有create sequence 或者 create any sequence系统权限。

CREATE SEQUENCE sequenceName  //创建序列名称
[INCREMENT BY n]  //序列递增值 如果n是正数就递增,如果是负数则递减 默认是1
[START WITH n]    //序列起始值,递增默认是minvalue 递减是maxvalue
[{MAXVALUE n | NOMAXVALUE}] // 序列最大值
[{MINVALUE n | NOMINVALUE}] // 序列最小值
[{CYCLE | NOCYCLE}] // 是否循环,如果使用CYCLE,则当序列到达最大值(maxvalue)或者最小值(minvalue)时,重置序列起始值,并现有规则继续生成序列值。如果使用NO CYCLE 选项,那么在序列达到最大值或最小值之后,如果再试图获取下一个值将返回一个错误。
[{CACHE n | NOCACHE}] // 是否预先生成序列号,并存储在内存中。n表示预生成的序列值个数。使用cache可能会跳号, 比如数据库突然不正常关闭(shutdown abort),cache中的序列号就会丢失. 所以,为了避免这种情况,无特殊需求的话,使用NOCACHE
[order | noorder]; // 是否按序生成序列。order表示按序生成序列(比如第一个序列值1,第二个为2,以此类推),noorder表示不包装序列值生成顺序。

说明:[]表示子句可选。

示例:

CREATE SEQUENCE orders_seq
increment By 1 
start With 1
Maxvalue 2000
Minvalue 1
cycle
Nocache;

修改序列

类似创建序列,不过需要注意的是,不支持修改序列起始值。

示例:

ALTER SEQUENCE orders_seq
increment By 10
Maxvalue 3000;

使用序列

一旦创建了序列,就可以使用seqName.CURRVALseqName.NEXTVAL来分别获取序列的当前值和下一个序列值。

可以使用序列的地方:

  • INSERT的VALUES子句、子查询
  • 不包含子查询、snapshot、视图的 SELECT 语句中的列表
  • UPDATE中的SET子句

不可以使用序列的地方:

  • 子查询、视图和实体化视图的查询

  • 带DISTINCT的SELECT语句

  • 带 GROUP BY和ORDER BY的SELECT语句

  • 带UNION或INTERSECT或MINUS的SELECT语句

  • SELECT中的WHERE字句

  • CREATE TABLE与ALTER TABLE中的default值、check约束条件。

示例:

INSERT INTO MY_ORDER('ID', 'SEQ', 'ORDER_NO') VALUES(1, orders_seq.NEXTVAL, 'xdfkgdls20220821');

SELECT orders_seq.CURRVAL FROM DUAL;

注意:

  • 第一次使用seqName.NEXTVAL返回的是序列的起始值;随后的seqName.NEXTVAL会自动增加你定义的INCREMENT BY的值,然后返回增加后的值作为序列值。
  • seqName.NEXTVAL初始化之后才能使用seqName.CURRVAL

删除序列

DROP SEQUENCE seqName;

标签:总结,seqName,NEXTVAL,生成,序列,使用,Oracle,SELECT
来源: https://www.cnblogs.com/shouke/p/16611522.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有