EXTEND/NOEXTEND
当用 SCALE 关键字指定 EXTEND 时,生成的序列值都是长度 (x+y),其中 x 是可伸缩偏移的长度(默认为 6),y 是序列中的最大位数 maxvalue/最小值。
因此,对于最大值为 100 和 SCALABLE EXTEND 指定的升序序列,生成的序列值的形式为 iii||sss||001, iii||sss||002, ...,iii||sss||100
SCALE 子句的默认设置是 NOEXTEND。
使用 NOEXTEND 设置,生成的序列值最多与序列 maxvalue/minvalue 中的最大位数一样宽。
此设置对于与使用序列填充固定宽度列的现有应用程序集成很有用。
在指定了 SCALABLE NOEXTEND 的序列上调用 NEXTVAL 时,如果生成的值需要比序列的最大值/最小值更多的表示位数,则会引发用户错误。
在生成 iii 时添加 100 可确保所有生成的值具有相同的长度,因此,所有实例中生成的值都不会重复。
可伸缩序列偏移的默认长度为 6 。
SCALE/NOSCALE
当指定 SCALE 时,数字偏移量被添加到序列的开头。
此偏移量的形式为“iii||sss||”,
其中:
iii 表示由 (instance_id % 100) + 100 给出的三位实例偏移量,
sss 表示由 (session_id % 1000) 给出的三位数会话偏移量,以及 ||是连接运算符
EXTEND/NOEXTEND 选项示例
让我们看一个使用 SCALE 关键字的 EXTEND/NOEXTEND 选项创建可伸缩序列的示例。
SQL> select instance_number from v$instance; INSTANCE_NUMBER -------------- 1
SQL> select sys_context('userenv','sid') from dual; SYS_CONTEXT('USERENV','SID') ----------------------------------------------------------------------------------------------------------------------------------- 22
扩展
SQL> create sequence seq_extend start with 1 increment by 1 minvalue 1 maxvalue 100 scale extend; Sequence created.
SQL> select seq_extend.nextval from dual; NEXTVAL --------- 101022001
不扩展
SQL> create sequence seq_noextend start with 1 increment by 1 minvalue 1 maxvalue 100 scale noextend; Sequence created.
SQL> select seq_noextend.nextval from dual; select seq_noextend.nextval from dual * ERROR at line 1: ORA-64603: NEXTVAL cannot be instantiated for SEQ_NOEXTEND. Widen the sequence by 4 doirts or alter sequence with SCALE EXTEND.
从 18.1 数据库开始,引入了“可扩展序列”。
添加了创建可扩展序列的功能,以提高数据加载到以序列值作为键的表中的性能。
此功能提供了添加实例和会话偏移量的选项,以显着降低跨 RAC 实例加载数据和单个实例内的多个加载进程时出现序列和索引块争用的可能性。
新的业务优势在于,它在将数据加载到使用序列值作为键的表中时减少了争用,从而进一步增强了 Oracle 数据库数据加载功能。
通过添加创建序列的能力,将实例和会话 id 添加到序列值,显着减少了序列值生成和索引块插入键值的争用。
这意味着 Oracle 数据库在数据加载方面具有更高的可扩展性,并且可以支持更高的数据加载速率。
SQL语句
CREATE | ALTER SEQUENCE [ schema. ]sequence [ { INCREMENT BY | START WITH } integer | { MAXVALUE integer | NOMAXVALUE } | { MINVALUE integer | NOMINVALUE } | { CYCLE | NOCYCLE } | { CACHE integer | NOCACHE } | { ORDER | NOORDER } | { SCALE {EXTEND | NOEXTEND} | NOSCALE} ]