documentation很清楚:
MAXVALUE
:指定序列可以生成的最大值。
错误信息也很清楚:
CREATE SEQUENCE smax START WITH 1 MAXVALUE 2;
SELECT smax.nextval FROM dual;
1
SELECT smax.nextval FROM dual;
2
SELECT smax.nextval FROM dual;
ORA-08004: SEQUENCE SMAX.NEXTVAL exceeds MAXVALUE and cannot be instantiated
但是,MAXVALUE
的目的是什么?有人曾将它用于生产目的吗?在我见过的众多序列中,MAXVALUE
要么未被使用,要么设置为任意高值,这个值看起来很高,永远不会达到。
MINVALUE
,MAXVALUE
和CYCLE
的组合虽然有意义,但是它是在野外发现的,即是否有人实际使用它?
答案 0 :(得分:1)
它是2003 SQL标准的一部分,因此它并不是Oracle特定的问题。
我主要期望MAXVALUE与CYCLE一起使用,但是有可能需要额外的干预(例如代码更改以切换前缀),因此您不希望它自动循环。
可能存在物理限制(例如,值必须符合6位数)或转换强加限制(例如,必须适合两个字节)。每当我使用具有这种限制的系统时,我们都避免使用序列,因为我们不希望任何未使用的数字通过缓存,失败的事务等而浪费。
答案 1 :(得分:-1)
序列号的一个用例可能是有一个唯一的ID,可以被应用程序使用(例如序列号和Joulian日期来生成Journal Key)为了最小化数字的冲突,我们将有一个为MAXVALUE
如果没有MAXVALUE,序列将不断增加,并且设置值后,一旦达到MAXVALUE,它就会循环。
Example:
START WITH 1
INCREMENT BY 10
MAXVALUE 100
the Sequence would go back to 1 once it reaches the value 91