1
什么是序列?
2
Oracle的序列相比PG多了什么?
支持CACHE/NOCACHE、SCALE、SESSION、GLOBAL特性; 支持NEXTVAL和CURRVAL伪列实现; 支持三个序列视图,ALL_SEQUENCES、DBA_SEQUENCES、USER_SEQUENCES;
3
3.4 的设计概述
语法修改,兼容oracle序列的部分语法。 功能实现,实现兼容oracle的部分序列功能。 序列调用的兼容,支持NEXTVAL和CURRVAL伪列使用序列值。 序列相关视图的创建以及序列的备份相关内容。
4
3.4 具体特性
4.1 CACHE/NOCACHE兼容
Oracle中CAHCHE只能指定为大于1的值,而PG中可以指定大于0的值。IvorySQL采用了与Oracle相同的做法; 新增关键字NOCACHE,指定NOCACHE时cache值为1,不指定时cache值默认为20;
>>>指定nocache的情况下,cache_size的值为1。
create sequence seq_cache nocache;
select cache_size from all_sequences where sequence_name='seq_cache';
cache_size
------------
1
(1 row)
复制
>>>不指定nocache的情况下,cache_size的默认值为20。
create sequence seq_cache;
select cache_size from all_sequences where sequence_name='seq_cache';
cache_size
------------
20
(1 row)
复制
PG中指定cache大于1时,多个会话之间的序列值会出现间隙,间隙值为cache值,即每个会话缓存了对应序列值,后续会话会从上一个会话缓存后的序列开始计算。而oracle中不同会话中共享一个缓冲序列。IvorySQL沿用了PG的规则;
4.2 SESSION/GLOBAL实现
GLOBAL:全局序列,会话之间共用一个序列,该选项为默认选项。 SESSION:每个会话重新登录都会拥有一个起始的序列值,会话之间序列相互不影响。
4.3 RESTART语法功能支持
>>>示例:
CREATE SEQUENCE seq_restart INCREMENT BY 1 START WITH 32 MINVALUE 10 MAXVALUE 50;
select seq_restart.nextval from dual;
nextval
---------
32
(1 row)
alter sequence seq_restart restart;
Restart后序列值从初始值开始计算。
select seq_restart.nextval from dual;
nextval
---------
10
(1 row)
复制
4.4 SCALE序列范围伸缩
>>>示例:
指定extend 的情况下,额外的6位数字添加在序列值的前面。
ivorysql=# CREATE SEQUENCE seq scale extend maxvalue 99999999;
CREATE SEQUENCE
ivorysql=# select seq.nextval from dual;
nextval
----------------
17400100000001
(1 row)
ivorysql=# DROP SEQUENCE seq;
DROP SEQUENCE
指定noextend 的情况下,额外的6位数字嵌在序列值的前部。
ivorysql=# CREATE SEQUENCE seq scale noextend maxvalue 99999999;
CREATE SEQUENCE
ivorysql=# select seq.nextval from dual;
nextval
----------
17400101
(1 row)
复制
4.5 NEXTVAL和CURRVAL伪列实现
4.6 序列相关视图实现
>>>示例:
使用USER_SEQUENCES视图
ivorysql=# select min_value, max_value from user_sequences where sequence_name = 'seq';
min_value | max_value
-----------+-----------
1 | 99999999
(1 row)
使用ALL_SEQUENCES视图
ivorysql=# select cache_size from all_sequences where sequence_name='seq';
cache_size
------------
20
(1 row)
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
942次阅读
2025-03-17 11:33:53
Oracle DataGuard高可用性解决方案详解
孙莹
400次阅读
2025-03-26 23:27:33
Oracle数据库调整内存应该注意的几个问题
听见风的声音
358次阅读
2025-03-18 09:43:11
墨天轮个人数说知识点合集
JiekeXu
345次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
334次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
303次阅读
2025-04-01 11:08:44
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
283次阅读
2025-03-24 09:42:53
Oracle 19c RAC更换IP实战,运维必看!
szrsu
282次阅读
2025-04-08 23:57:08
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
278次阅读
2025-03-19 14:41:51
oracle定时任务常用攻略
virvle
273次阅读
2025-03-25 16:05:19