在达到MAXVALUE后,序列从1开始,甚至是指定的100

Mik*_*yev 3 oracle cycle sequence

我遇到了一个非常奇怪的Oracle序列行为.我有以下顺序:

CREATE SEQUENCE SEQ1 INCREMENT BY 10 START WITH 100 MAXVALUE 200 CYCLE NOCACHE;
Run Code Online (Sandbox Code Playgroud)

以下是"OCA/OCP Oracle数据库11g一体化考试指南"的摘录:

CYCLE控制达到MAXVALUE或MINVALUE时的行为.默认行为是给出错误,但是如果指定了CYCLE,则序列将返回其起始点并重复.

从这里我推断,在达到200的MAXVALUE后,我将得到100,因为起点是100.但令人惊讶的是我得到了一个.这是为什么?

yam*_*mny 6

让我们看一下文档中的以下摘录:

指定CYCLE以指示序列在达到其最大值或最小值后继续生成值.在升序序列达到其最大值后,它将生成其最小值.在降序序列达到最小值后,它会生成最大值.

这意味着,START WITH值是不够的,在你的情况,所以两者 MINVALUEMAXVALUE应解决.没有给定MINVALUE,循环将从1开始.