序列中赋值和起始值的差异

时间:2018-03-29 10:39:18

标签: sql db2 sequence

我创建了一个序列

CREATE SEQUENCE CA_SEQUENCE_NUMBER_SEQ
start with 9000000000
increment by 1
nocycle
nocache;

已分配开始值是相同的数字。请建议我可能是什么原因

请参阅图片以获得清晰的图片。Evidence

此图像详细信息来自SYSSEQUENCES数据字典视图

2 个答案:

答案 0 :(得分:1)

我认为序列已被改变。 E.g。

CREATE SEQUENCE CA_SEQUENCE_NUMBER_SEQ AS DECIMAL(31,0) start with 7000000000;
values nextval for CA_SEQUENCE_NUMBER_SEQ;
ALTER SEQUENCE CA_SEQUENCE_NUMBER_SEQ restart with 9000000000;

然后SYSCAT.SEQUENCES会显示

select NEXTCACHEFIRSTVALUE from syscat.sequences where seqname = 'CA_SEQUENCE_NUMBER_SEQ'"

NEXTCACHEFIRSTVALUE              
---------------------------------
                       7000000000.

  1 record(s) selected.

但是在再次呼叫values nextval for CA_SEQUENCE_NUMBER_SEQ之后,NEXTCACHEFIRSTVALUE将更新

values nextval for CA_SEQUENCE_NUMBER_SEQ;

1                                
---------------------------------
                      9000000000.

  1 record(s) selected.

select NEXTCACHEFIRSTVALUE from syscat.sequences where seqname = 'CA_SEQUENCE_NUMBER_SEQ'"

NEXTCACHEFIRSTVALUE              
---------------------------------
                       9000000020.

  1 record(s) selected.

答案 1 :(得分:1)

似乎创建语句发生在前一段时间,因为从序列中生成了> 700,000个数字。可以通过发出ALTER SEQUENCE语句从任何地方重新启动序列,例如:

ALTER SEQUENCE CA_SEQUENCE_NUMBER_SEQ RESTART 7000000000

您只需使用CREATE SEQUENCE,就可以将其指回RESTART语句中指定的起始值:

ALTER SEQUENCE CA_SEQUENCE_NUMBER_SEQ RESTART

以下是文档的相关部分:

>>-ALTER SEQUENCE--sequence-name-------------------------------->

   .-----------------------------------------------.   
   V  (1)                                          |   
>----------+-RESTART--+------------------------+-+-+-----------><
           |          '-WITH--numeric-constant-' |
     
RESTART
  
重新启动序列。如果未指定numeric-constant,则序列将以隐式或显式指定的值重新启动,作为最初创建序列的CREATE SEQUENCE语句的起始值。
  
WITH numeric-constant
  
使用指定值重新启动序列。此值可以是任何正值或负值,可以分配给与序列关联的数据类型的列(SQLSTATE 42815),小数点右侧不存在非零数字(SQLSTATE 428FA)。
< / DL>