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