Sentencia ALTER SEQUENCE

La sentencia ALTER SEQUENCE puede utilizarse para cambiar una secuencia.

Una secuencia puede cambiarse de las formas siguientes:
  • Reiniciando la secuencia
  • Cambiando el incremento entre valores de secuencia futuros
  • Estableciendo o eliminando los valores mínimo y máximo
  • Cambiando los números de secuencia almacenados en memoria caché
  • Cambiando el atributo que determina si la secuencia puede realizar un ciclo o no
  • Cambiando la posibilidad de que los números de secuencia deban generarse en orden de petición

Invocación

Esta sentencia se puede incorporar a un programa de aplicación o emitir mediante el uso de sentencias de SQL dinámico. Es una sentencia ejecutable que puede prepararse de forma dinámica sólo si el comportamiento de ejecución de DYNAMICRULES está en vigor para el paquete (SQLSTATE 42509).

Autorización

Los privilegios que posee el ID de autorización de la sentencia debe tener al menos una de las autorizaciones siguientes:
  • Privilegio ALTER para la secuencia que se va a modificar
  • Privilegio ALTERIN para el esquema especificado implícita o explícitamente
  • Autorización SCHEMAADM el esquema especificada implícita o explícitamente
  • Autorización DBADM

Sintaxis

Leer el esquema de sintaxisOmitir el esquema de sintaxis visualALTER SEQUENCEnombre-secuencia1RESTARTWITHconstante-numéricaINCREMENT BYconstante-numéricaMINVALUEconstante-numéricaNO MINVALUEMAXVALUEconstante-numéricaNO MAXVALUECYCLENO CYCLECACHEconstante-enteroNO CACHEORDERNO ORDER
Notas:
  • 1 Una misma cláusula no se debe especificar más de una vez.

Descripción

nombre-secuencia
Identifica la secuencia que va a cambiarse. El nombre (incluido el calificador de esquema implícito o explícito) debe designar de forma exclusiva una secuencia existente en el servidor actual. Si en el esquema especificado implícita o explícitamente no existe ninguna secuencia con este nombre, se devuelve un error (SQLSTATE 42704). El nombre-secuencia no debe ser una secuencia generada por el sistema para una columna de identidad (SQLSTATE 428FB).
RESTART
Reinicia la secuencia. Si no se especifica constante-numérica, la secuencia se reinicia en el valor especificado implícita o explícitamente como el valor inicial en la sentencia CREATE SEQUENCE que ha creado originalmente la secuencia.
WITH constante-numérica
Reinicia la secuencia con el valor especificado. Este valor puede ser cualquier valor positivo o negativo que pueda asignarse a una columna del tipo de datos asociado a la secuencia (SQLSTATE 42815), sin dígitos distintos de cero a la derecha de la coma decimal (SQLSTATE 428FA).
INCREMENT BY constante-numérica
Especifica el intervalo entre valores consecutivos de la secuencia. Este valor puede ser cualquier valor positivo o negativo que pueda asignarse a una columna del tipo de datos asociado a la secuencia (SQLSTATE 42815). El valor no debe superar el valor de una constante de enteros grande (SQLSTATE 42820) ni contener dígitos que no sean cero a la derecha de la coma decimal (SQLSTATE 428FA).

Si este valor es negativo, se trata de una secuencia descendente. Si este valor es 0 o positivo, es una secuencia ascendente tras la sentencia ALTER.

MINVALUE o NO MINVALUE
Especifica el valor mínimo en el que una secuencia descendente pasa por un ciclo o deja de generar valores o en el que una secuencia ascendente pasa por un ciclo después de alcanzar el valor máximo.
MINVALUE constante-numérica
Especifica la constante numérica que es el valor mínimo. Este valor puede ser cualquier valor positivo o negativo que pueda asignarse a una columna del tipo de datos asociado a la secuencia (SQLSTATE 42815), sin dígitos distintos de cero a la derecha de la coma decimal (SQLSTATE 428FA), pero el valor debe ser inferior o igual al valor máximo (SQLSTATE 42815).
NO MINVALUE
Para una secuencia ascendente, el valor es el valor de inicio original. Para una secuencia descendente, el valor es el valor mínimo del tipo de datos asociado con la secuencia.
MAXVALUE o NO MAXVALUE
Especifica el valor máximo en el que una secuencia ascendente pasa por un ciclo o deja de generar valores o en el que una secuencia descendente pasa por un ciclo después de alcanzar el valor mínimo.
MAXVALUE constante-numérica
Especifica la constante numérica que es el valor máximo. Este valor puede ser cualquier valor positivo o negativo que pueda asignarse a una columna del tipo de datos asociado a la secuencia (SQLSTATE 42815), sin dígitos distintos de cero a la derecha de la coma decimal (SQLSTATE 428FA), pero el valor debe ser superior o igual al valor mínimo (SQLSTATE 42815).
NO MAXVALUE
Para una secuencia ascendente, el valor es el valor máximo del tipo de datos asociado con la secuencia. Para una secuencia descendente, el valor es el valor de inicio original.
CYCLE o NO CYCLE
Especifica si la secuencia debe continuar generando valores después de alcanzar el valor máximo o el valor mínimo. El límite de la secuencia puede alcanzarse con el siguiente valor que coincida exactamente con la condición de límite o excediendo el valor.
CYCLE
Especifica que se continúan generando valores para esta secuencia después de haber alcanzado el valor máximo o mínimo. Si se utiliza esta opción, cuando una secuencia ascendente haya alcanzado su valor máximo, generará su valor mínimo; o cuando una secuencia descendente haya alcanzado su valor mínimo, generará su valor máximo. Los valores máximo y mínimo para la secuencia determinan el rango que se utiliza para el ciclo.

Cuando CYCLE está en vigor, se pueden generar valores duplicados para la secuencia.

NO CYCLE
Especifica que no se generarán valores para la secuencia una vez que se haya alcanzado el valor máximo o mínimo para la secuencia.
CACHE o NO CACHE
Especifica si se deben mantener algunos valores preasignados en memoria para obtener un acceso más rápido. Esta opción se utiliza para el rendimiento y el ajuste.
CACHE constante-entera
Especifica el número máximo de valores de secuencia que se preasignan y se mantienen en memoria. La preasignación y el almacenamiento de valores en la memoria caché reducen la E/S síncrona en las anotaciones cronológicas cuando se generan valores para la secuencia.
En el caso de producirse una anomalía del sistema, todos los valores de secuencia almacenados en memoria caché que no se han utilizando en sentencias confirmadas se pierden (es decir, no se utilizarán nunca).El número máximo de valores de secuencia que puede perderse se calcula de la siguiente manera:
  • Si se especifica ORDER, el máximo es el valor especificado para la opción CACHE.
  • En un entorno de varias particiones, el máximo es el valor especificado para la opción CACHE multiplicado por el número de miembros que generan nuevos valores de identidad.

El valor mínimo es 2 (SQLSTATE 42815).

NO CACHE
Especifica que los valores de la secuencia no se deben preasignar. Asegura que no haya ninguna pérdida de valores en el caso de producirse una anomalía del sistema, un cierre o una desactivación de la base de datos. Cuando se especifica esta opción, los valores de la secuencia no se almacenan en la memoria caché. En este caso, cada petición de un valor nuevo para la secuencia produce E/S síncrona en las anotaciones cronológicas.
ORDER o NO ORDER
Especifica si los números de secuencia deben generarse según el orden de petición.
ORDER
Especifica que los números de secuencia se generan según el orden de petición.
NO ORDER
Especifica que los números de secuencia no necesitan generarse según el orden de petición.

Notas

  • Sólo los números de secuencia futuros se ven afectados por la secuencia ALTER SEQUENCE.
  • El tipo de datos de una secuencia no se puede cambiar. En lugar de ello, descarte la secuencia y vuelva a crearla especificando el tipo de datos necesario para la nueva secuencia.
  • Todos los valores almacenados en memoria caché se pierden cuando se modifica una secuencia.
  • Después de reiniciar una secuencia o de cambiar a CYCLE, es posible que los números de secuencia sean valores duplicados de los números generados por la secuencia anteriormente.

Ejemplo

Una posible razón para especificar RESTART sin un valor numérico puede ser para restablecer la secuencia en el valor START WITH. En este ejemplo, el objetivo es generar los números del 1 hasta el número de filas de tabla y, a continuación, insertar los números en una columna añadida a la tabla utilizando tablas temporales. También se podría utilizar para obtener resultados en los que todas las filas resultantes estén numeradas:
   ALTER SEQUENCE ORG_SEQ RESTART
   SELECT NEXT VALUE FOR ORG_SEQ, ORG.* FROM ORG