Oracle 循环序列中缓存允许的最大值

Oracle 循环序列中缓存允许的最大值,oracle,database-sequence,Oracle,Database Sequence,根据公式,即 CREATE SEQUENCE demo_seq START WITH 1 INCREMENT BY 3 MINVALUE 1 MAXVALUE 14 CYCLE CACHE (?); 所以 该值为4.33 那么,上面的序列4或序列5的缓存值是多少。您采用了以下公式: 缓存 指定数据库预先分配并保留在内存中的序列值的数量,以便更快地访问。此整数值可以包含28位或更少的数字。此参数的最小值为2。对于循环的序列,该值必须小于循环中的值数。缓存的值不能超过给定序列号循环中的值。因此,缓

根据公式,即

CREATE SEQUENCE demo_seq
START WITH 1
INCREMENT BY 3
MINVALUE 1
MAXVALUE 14
CYCLE
CACHE (?);
所以

该值为4.33 那么,上面的序列4或序列5的缓存值是多少。

您采用了以下公式:

缓存
指定数据库预先分配并保留在内存中的序列值的数量,以便更快地访问。此整数值可以包含28位或更少的数字。此参数的最小值为2。对于循环的序列,该值必须小于循环中的值数。缓存的值不能超过给定序列号循环中的值。因此,
缓存允许的最大值必须小于以下公式确定的值:

(CEIL(14-1))/ABS(3)
你似乎错过了那一段的“必须少于”部分。因此,在您的示例中,缓存必须小于4.333;因此必须是4-至少根据文件。Oracle实际上允许您将缓存设置为5;它只抱怨6个或以上:

(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)

。。。所以这看起来像是一个文档错误。

我认为文档应该是
CEIL((MAXVALUE-MINVALUE)/ABS(INCREMENT))
(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)
CREATE SEQUENCE demo_seq
START WITH 1
INCREMENT BY 3
MINVALUE 1
MAXVALUE 14
CYCLE
CACHE 5;

Sequence DEMO_SEQ created.

drop sequence demo_seq;

Sequence DEMO_SEQ dropped.

CREATE SEQUENCE demo_seq
START WITH 1
INCREMENT BY 3
MINVALUE 1
MAXVALUE 14
CYCLE
CACHE 6;

ORA-04013: number to CACHE must be less than one cycle