MAXVALUE的Oracle序列的目的是什么?

时间:2018-05-27 09:21:23

标签: oracle sequence

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要么未被使用,要么设置为任意高值,这个值看起来很高,永远不会达到。

MINVALUEMAXVALUECYCLE的组合虽然有意义,但是它是在野外发现的,即是否有人实际使用它?

2 个答案:

答案 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