Oracle数据库序列详解(2)
我们缓存设定的值是 50,而最大值是 300,那么为什么还会提示这样的信息呢? 其实我们的 cache 虽然是 50,但是我们每次增长值是 10。这样 50 次缓存提取出的数是 500 (50*10),我们每次循环的最大值是300,所以就提示我们一次获取的缓存值必须小于一次循环产生的最大值。 我们将代码修改如下: create sequence SEQ_CACHE1 increment by 10 start with 10 maxvalue 500 minvalue 10 cycle cache 50; 发现仍然报错如下图所示: 这又是为什么呢?我们一次循环的最大值已经设置成500了,为什么还有这样的错误提示?这是因为还存在一个 minvalue ,minvalue 和 maxvalue 之间是 490 个数,也就是一次循环可以提取 490,但是我们的缓存是500。 我们将代码修改如下: create sequence SEQ_CACHE1 increment by 10 start with 10 maxvalue 500 minvalue 9 cycle cache 50; 发现创建序列成功。在创建序列的时候关于缓存值的设置我们有一个基本的公式要求: 最大值-最小值>=(缓存值-1)*每次循环的值 只要满足这个公式的缓存值设置就没有问题。 总结: 通过上述我们发现使用序列有几个基本的约束条件,总结有以下几条: 1、序列第一次必须先调用nextval获取一个序列值才能使用currval查看当前值 2、序列的起始值不能小于最小值 3、创建一个循环序列,则必须要设定最大值 4、如果创建带缓存的序列,缓存的值必须满足约束公式: 最大值-最小值>=(缓存值-1)*每次循环的值 以上是对oracle数据库的序列的详细介绍,希望能对大家理解和掌握序列的使用有所帮助。 (编辑:ASP站长网) |