Notas del release

35.2 Capítulo 6. Técnicas comunes de aplicación de DB2

35.2.1 Generación de valores secuenciales

La generación de valores secuenciales es un problema común del desarrollo de aplicaciones de base de datos. La mejor solución a ese problema es la utilización de objetos de secuencia y expresiones de secuencia en SQL. Cada objeto de secuencia es un objeto de base de datos con nombre exclusivo al que sólo pueden acceder las expresiones de secuencia. Hay dos expresiones de secuencia: la expresión PREVVAL y la expresión NEXTVAL. La expresión PREVVAL devuelve el valor generado más recientemente para la secuencia especificada para una sentencia anterior. La expresión de secuencia NEXTVAL incrementa el valor del objeto de secuencia y devuelve el nuevo valor del objeto de secuencia.

Para crear un objeto de secuencia, emita la sentencia CREATE SEQUENCE. Por ejemplo, para crear un objeto de secuencia llamado id_values utilizando los atributos por omisión, emita la sentencia siguiente:

CREATE SEQUENCE id_values

Para visualizar el valor actual del objeto de secuencia, emita una sentencia VALUES utilizando la expresión PREVVAL:

VALUES PREVVAL FOR id_values
 
1
-----------
          1
 
            1 registro(s) seleccionado(s).

Se puede recuperar el valor actual del objeto de secuencia repetidamente y el valor que el objeto de secuencia devuelve no cambia hasta que se emite una expresión NEXTVAL. En el ejemplo siguiente, la expresión PREVVAL devuelve un valor de 1, hasta que la expresión NEXTVAL aumenta el valor del objeto de secuencia:

VALUES PREVVAL FOR id_values
 
1
-----------
          1
 
            1 registro(s) seleccionado(s).
 
VALUES PREVVAL FOR id_values
 
1
-----------
          1
 
            1 registro(s) seleccionado(s).
 
VALUES NEXTVAL FOR id_values
 
1
-----------
          2
 
            1 registro(s) seleccionado(s).
 
VALUES PREVVAL FOR id_values
 
1
-----------
          2
 
            1 registro(s) seleccionado(s).

Para actualizar el valor de una columna con el siguiente valor del objeto de secuencia, incluya la expresión NEXTVAL en la sentencia UPDATE, del modo siguiente:

UPDATE personal
  SET id = NEXTVAL FOR id_values
  WHERE id = 350

Para insertar una nueva fila en una tabla utilizando el siguiente valor del objeto de secuencia, incluya la expresión NEXTVAL en la sentencia INSERT, del modo siguiente:

INSERT INTO personal (id, nombre, dept, cargo)
  VALUES (NEXTVAL FOR id_values, 'Kandil', 51, 'Director')

Si desea obtener más información sobre las expresiones PREVVAL y NEXTVAL, consulte el manual Consulta de SQL.

35.2.1.1 Control del comportamiento de secuencias

Puede adaptar el comportamiento de objetos de secuencia para satisfacer las necesidades de su aplicación. Se cambian los atributos de un objeto de secuencia cuando se emite la sentencia CREATE SEQUENCE para crear un nuevo objeto de secuencia y cuando se emite una sentencia ALTER SEQUENCE para un objeto de secuencia ya existente. A continuación se encuentran algunos de los atributos de un objeto de secuencia que se pueden especificar:

Tipo de datos
La cláusula AS de la sentencia CREATE SEQUENCE especifica el tipo de datos numérico del objeto de secuencia. El tipo de datos, tal como se especifica en el apéndice "Límites de SQL" del manual Consulta de SQL, determina los valores máximo y mínimo posibles del objeto de secuencia. No se puede cambiar el tipo de datos de un objeto de secuencia; en su lugar, deberá descartar el objeto de secuencia emitiendo la sentencia DROP SEQUENCE y emitiendo una sentencia CREATE SEQUENCE con el nuevo tipo de datos.

Valor inicial
La cláusula START WITH de la sentencia CREATE SEQUENCE establece el valor inicial del objeto de secuencia. La cláusula RESTART WITH de la sentencia ALTER SEQUENCE restablece el valor del objeto de secuencia en un valor especificado.

Valor mínimo
La cláusula MINVALUE establece el valor mínimo del objeto de secuencia.

Valor máximo
La cláusula MAXVALUE establece el valor máximo del objeto de secuencia.

Valor de incremento
La cláusula INCREMENT BY establece el valor que cada expresión NEXTVAL añade al objeto de secuencia. Para disminuir el valor del objeto de secuencia, especifique un valor negativo.

Secuencia cíclica
La cláusula CYCLE hace que el valor de un objeto de secuencia que alcanza su valor máximo o mínimo vuelva a su valor inicial en la expresión NEXTVAL que sigue.

Por ejemplo, para crear un objeto de secuencia llamado id_values que empiece con un valor de 0, tenga un valor máximo de 1000, incremente en 2 con cada expresión NEXTVAL y vuelva a su valor inicial cuando se alcance el valor máximo, emita la sentencia siguiente:

CREATE SEQUENCE id_values
  START WITH 0
  INCREMENT BY 2
  MAXVALUE 1000
  CYCLE

Si desea obtener más información sobre las sentencias CREATE SEQUENCE y ALTER SEQUENCE, consulte el manual Consulta de SQL.

35.2.1.2 Mejora del rendimiento con objetos de secuencia

Al igual que las columnas de identidad, la utilización de objetos de secuencia para generar valores normalmente mejora el rendimiento de las aplicaciones en comparación con los acercamientos alternativos. La alternativa a los objetos de secuencia consiste en crear una tabla de una sola columna que almacene el valor actual e incremente este valor con un activador o bajo el control de la aplicación. En un entorno distribuido donde las aplicaciones acceden de forma simultánea a la tabla de una sola columna, el bloqueo necesario para forzar el acceso en serie a la tabla puede afectar gravemente al rendimiento.

Los objetos de secuencia evitan los problemas de bloqueo que están asociados con el acercamiento a tablas de una única columna y pueden almacenar en antememoria valores de secuencia en memoria para mejorar el tiempo de respuesta de DB2. Para maximizar el rendimiento de aplicaciones que utilizan objetos de secuencia, asegúrese de que el objeto de secuencia almacene en antememoria una cantidad apropiada de valores de secuencia. La cláusula CACHE de las sentencias CREATE SEQUENCE y ALTER SEQUENCE especifica el número máximo de valores de secuencia que DB2 genera y almacena en memoria.

Si el objeto de secuencia debe generar valores en orden, sin introducir espacios en ese orden debido a una anomalía del sistema o desactivación de la base de datos, utilice las cláusulas ORDER y NO CACHE en la sentencia CREATE SEQUENCE. La cláusula NO CACHE garantiza que no aparezcan espacios en los valores generados a expensas de parte del rendimiento de la aplicación, puesto que fuerza al objeto de secuencia a grabar en la anotación cronológica de la base de datos cada vez que genera un nuevo valor.

35.2.1.3 Comparación de objetos de secuencia y columnas de identidad

Aunque los objetos de secuencia y las columnas de identidad parecen servir a finalidades parecidas para aplicaciones de DB2, hay diversas diferencias importantes:


[ Principio de página | Página anterior | Página siguiente ]