ALTER SEQUENCE 语句
可以使用 ALTER SEQUENCE 语句来更改序列。
可以通过以下方式更改序列:
- 重新启动序列
- 更改未来序列值之间的增量
- 设置或消除最小值或最大值
- 更改高速缓存序号的数目
- 更改用于确定序列是否可以循环的属性
- 更改是否必须按请求顺序生成序号
调用
此语句可以嵌入在应用程序中,也可通过动态 SQL 语句来发出。 它是一个可执行语句,仅当 DYNAMICRULES 运行行为对于程序包有效时才能动态编译 (SQLSTATE 42509)。
权限
语句授权标识所拥有的特权必须至少包括下列其中一项权限:
- 对要变更的序列的 ALTER 特权
- 对模式隐式或显式指定的 ALTERIN 特权
- 对模式隐式或显式指定的 SCHEMAADM 权限
- DBADM 权限
语法
描述
- sequence-name
- 标识要更改的序列。 名称 (包括隐式或显式模式限定符) 必须唯一地标识当前服务器上的现有序列。 如果在显式或隐式指定的模式中不存在使用此名称的序列,那么将返回错误 (SQLSTATE 42704)。 sequence-name 不得是系统为标识列生成的序列 (SQLSTATE 428FB)。
- RESTART
- 重新启动序列。 如果未指定 numeric-constant ,那么将以隐式或显式指定的值作为最初创建序列的 CREATE SEQUENCE 语句的起始值来重新启动序列。
- WITH 数字常量
- 重新启动具有指定值的序列。 此值可以是可以分配给与序列关联的数据类型的列的任何正值或负值 (SQLSTATE 42815) ,小数点右侧不存在非零数字 (SQLSTATE 428FA)。
- INCREMENT BY numeric-constant
- 指定序列的连续值之间的时间间隔。 此值可以是可以分配给与序列关联的数据类型列的任何正值或负值 (SQLSTATE 42815)。 该值不得超过大整数常量的值 (SQLSTATE 42820) ,并且不得包含小数点右边的非零数字 (SQLSTATE 428FA)。
如果此值为负数,那么这是降序序列。 如果此值为 0 或正数,那么 ALTER 语句后为升序序列。
- MINVALUE 或 NO MINVALUE
- 指定一个最小值,降序序列将循环或停止生成值,或者升序序列将在达到最大值后循环。
- MINVALUE numeric-constant
- 指定作为最小值的数字常量。 该值可以是可以分配给与序列 (SQLSTATE 42815) 关联的数据类型的列的任何正值或负值,而小数点右侧不存在非零数字 (SQLSTATE 428FA) ,但该值必须小于或等于最大值 (SQLSTATE 42815)。
- NO MINVALUE
- 对于升序序列,该值是原始的起始值。 对于降序序列,该值是与序列关联的数据类型的最小值。
- MAXVALUE 或 NO MAXVALUE
- 指定升序序列在达到最小值后循环或停止生成值或降序序列循环至的最大值。
- MAXVALUE numeric-constant
- 指定作为最大值的数值常数。 此值可以是可以分配给与序列 (SQLSTATE 42815) 关联的数据类型的列的任何正值或负值,而小数点右侧不存在非零数字 (SQLSTATE 428FA) ,但该值必须大于或等于最小值 (SQLSTATE 42815)。
- NO MAXVALUE
- 对于升序序列,该值是与序列关联的数据类型的最大值。 对于降序序列,该值是原始的起始值。
- CYCLE 或 NO CYCLE
- 指定序列在达到其最大值或最小值后是否应继续生成值。 序列的边界可以通过下一个值正好在边界条件上到达,也可以通过覆盖该值来到达。
- CYCLE
- 指定在达到最大值或最小值后继续为此序列生成值。 如果使用此选项,那么在升序序列达到其最大值后,将生成其最小值; 或者在降序序列达到其最小值后,将生成其最大值。 序列的最大值和最小值确定用于循环的范围。
当 CYCLE 生效时,可以为序列生成重复的值。
- NO CYCLE
- 指定一旦达到序列的最大值或最小值,就不会为序列生成值。
- CACHE 或 NO CACHE
- 指定是否在内存中保留部分预分配值,以加速访问。 这是一个性能和调整选项。
- CACHE integer-constant
- 指定预先分配并保留在内存中的最大序列值数。 在为序列生成值时,在高速缓存中预先分配和存储值可减少对日志的同步 I/O。发生系统故障时,所有未在已落实的语句中使用的高速缓存序列值都将丢失 (即,永远不会使用这些值)。可丢失的序列值的最大数目计算如下:
- 如果指定了 ORDER,那么最大值是对 CACHE 选项指定的值。
- 在多分区 或 Db2® pureScale® 环境中,最大值是对 CACHE 选项指定的值乘以生成新身份值的成员数。
最小值为 2 (SQLSTATE 42815)。
- NO CACHE
- 指定不预先分配序列的值。 它确保在发生系统故障,关闭或数据库取消激活的情况下不会丢失值。 如果指定了此选项,那么序列的值不会存储在高速缓存中。 在这种情况下,对序列的新值的每个请求都会导致日志的同步 I/O。
- ORDER 或 NO ORDER
- 指定是否必须按照请求的顺序生成序号。
- ORDER
- 指定按请求顺序生成序号。
- NO ORDER
- 指定不需要按请求顺序生成序号。
注意
- ALTER SEQUENCE 语句仅影响将来的序号。
- 不能更改序列的数据类型。 而是删除并重新创建指定新序列所需数据类型的序列。
- 更改序列时,所有高速缓存的值都将丢失。
- 在重新启动序列或更改为 CYCLE 后,序号可能是先前序列生成的序号的重复值。
- 语法替换:与先前版本的 DB2 及其他数据库产品的兼容性支持下列语法替换。 这些备用项是非标准的,不应使用。
- 可以使用逗号来分隔多个序列选项。
- 可分别指定 NOMINVALUE、NOMAXVALUE、NOCYCLE、NOCACHE 和 NOORDER 以代替 NO MINVALUE、NO MAXVALUE、NO CYCLE、NO CACHE 和 NO ORDER
示例
指定不带数字值的 RESTART 的可能原因是将序列重置为 START WITH 值。 在此示例中,目标是生成从 1 到表中行数的数字,然后使用临时表将这些数字插入到添加到表中的列中。 另一个用途是将结果恢复到所有生成的行都编号的位置:
ALTER SEQUENCE ORG_SEQ RESTART
SELECT NEXT VALUE FOR ORG_SEQ, ORG.* FROM ORG