CYCLE序列中CACHE允许的最大值

时间:2017-04-05 08:37:19

标签: oracle database-sequence

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

1 个答案:

答案 0 :(得分:1)

您已采用该公式from the documentaion

  

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

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

你好像错过了#34;必须小于&#34;该段的一部分。所以在你的例子中,缓存必须小于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

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