1
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 值是多少。

4

1 回答 1

2

已从文档中获取该公式:

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

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

于 2017-04-05T08:47:38.317 回答