CREATE SEQUENCE demo_seq
START WITH 1
INCREMENT BY 3
MINVALUE 1
MAXVALUE 14
CYCLE
CACHE (?);
根据公式即
(CEIL(MAXVALUE-MINVALUE))/ABS(INCREMENT)
所以,
(CEIL(14-1))/ABS(3)
值是 4.33 那么上面的序列 4 或 5 的 CACHE 值是多少。
CREATE SEQUENCE demo_seq
START WITH 1
INCREMENT BY 3
MINVALUE 1
MAXVALUE 14
CYCLE
CACHE (?);
根据公式即
(CEIL(MAXVALUE-MINVALUE))/ABS(INCREMENT)
所以,
(CEIL(14-1))/ABS(3)
值是 4.33 那么上面的序列 4 或 5 的 CACHE 值是多少。
您已从文档中获取该公式:
CACHE
指定数据库预分配多少序列值并保存在内存中以便更快地访问。此整数值可以有 28 位或更少的数字。此参数的最小值为 2。对于循环的序列,此值必须小于循环中的值数。您不能缓存比给定序列号循环更多的值。因此,允许的最大值CACHE
必须小于由以下公式确定的值:(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)
您似乎错过了该段的“必须小于”部分。因此,在您的示例中,缓存必须小于 4.333;因此必须是 4 - 至少根据文档。不过,Oracle 实际上确实允许您将缓存设置为 5;它只抱怨6或以上:
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
...所以这看起来像一个文档错误。