SAP Tutorial de HANA: crear secuencia

⚡ Resumen inteligente

Crear secuencia en SAP HANA define un objeto de base de datos que genera automáticamente una lista incremental de valores numéricos. Los parámetros controlan el valor inicial, el incremento, los límites, el ciclo y el comportamiento de almacenamiento en caché del generador.

  • 🔢 Definición básica: Una secuencia genera números de acuerdo con la regla establecida en su especificación, ya sea en orden ascendente o descendente.
  • 🔗 Sin encuadernación de mesa: Las secuencias son objetos independientes que utiliza la aplicación, en lugar de estar asociados a ninguna tabla.
  • 📍 Dos valores: CURRVAL devuelve el valor actual y NEXTVAL avanza la secuencia y devuelve el nuevo valor.
  • 🎚️ Parámetros clave: Las opciones START WITH, INCREMENT BY, MAXVALUE, MINVALUE, CYCLE y CACHE dan forma al resultado.
  • ♻️ Ciclismo: CYCLE reinicia la numeración en el límite; NO CYCLE es la opción predeterminada y genera un error.
  • Almacenamiento en caché: CACHE reserva un bloque de números por nodo para mayor velocidad; NO CACHE es la opción predeterminada.
  • 🔄 Opción de reinicio: RESET BY ejecuta una subconsulta al reiniciar la base de datos y reanuda la ejecución desde el valor que devuelve.

Crear secuencia en SAP HANA

¿Qué es Secuencia?

Una secuencia es un objeto de base de datos que genera automáticamente la lista incrementada de valores numéricos de acuerdo con la regla especificada en la especificación de secuencia.

Por ejemplo, para insertar el número de empleado automáticamente en la columna (EMPLOYEE_NO) de la tabla, cuando se inserta un nuevo registro en la tabla, usamos la secuencia.

Los valores de secuencia se generan en orden ascendente o descendente.

Las secuencias no están asociadas con tablas; son utilizados por la aplicación. Hay dos valores en secuencia:

  • CURRVAL: proporciona el valor actual de la secuencia.
  • NEXTVAL: proporciona el siguiente valor de secuencia.

SINTAXIS

CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]

ELEMENTOS DE SINTÁXIS

ELEMENTOS DESCRIPCIÓN
Es el nombre de la secuencia.
[] Especifica uno o más parámetros de secuencia.
COMENZAR CON Describe el valor de la secuencia inicial.
INCREMENTAR POR Esto especifica el valor que se incrementará desde el último valor asignado cada vez que se genere un nuevo valor de secuencia. El valor predeterminado es 1.
MAXVALUE Esto especifica el valor máximo que puede generar la secuencia. puede estar entre -4611686018427387903 y 4611686018427387902.
SIN VALOR MÁXIMO Cuando se especifica NO MAXVALUE, para una secuencia ascendente, el valor máximo será 4611686018427387903 y el valor mínimo para una secuencia descendente será -1.
VALOR MÍNIMO / SIN VALOR MÍNIMO Especifica el valor mínimo que puede generar una secuencia. puede estar entre -4611686018427387904 y 4611686018427387902. Cuando se utiliza NO MINVALUE, el valor mínimo para una secuencia ascendente es 1.
CICLO La directiva CYCLE especifica que el número de secuencia se reiniciará después de alcanzar su valor máximo o mínimo.
SIN CICLO Opción predeterminada. La directiva NO CYCLE especifica que el número de secuencia no se reiniciará después de alcanzar su valor máximo o mínimo.
CACHE El tamaño de la caché especifica qué rango de números de secuencia se almacenará en caché en un nodo. Debe ser un número entero sin signo.
SIN CACHÉ Opción predeterminada. La directiva NO CACHE especifica que el número de secuencia no se almacenará en caché en un nodo.
RESET POR Especifica que durante el reinicio de la base de datos, la base de datos ejecuta automáticamente la y el valor de la secuencia se reinicia con el valor devuelto.

Ejemplo

Crearemos una secuencia con el nombre DHK_SCHEMA.EMP_NO, que creará un valor incrementado de la secuencia en +1 cada vez que se use la secuencia.

Guión de secuencia –

CREATE SEQUENCE DHK_SCHEMA.EMP_NO START WITH 100 INCREMENT BY 1;

Aquí usaremos el objeto "secuencia" en el siguiente ejemplo para incrementar el valor del número de empleado en +1 cada vez que se ejecuta la consulta de selección. En la consulta, el "nextval" se puede utilizar para generar el número de serie o el mismo tipo de requisito.

Uso de secuencia –

SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;

SALIDA – 100, 101, 102 … y así sucesivamente para cada ejecución de la consulta select anterior.

Cómo usar una secuencia en una tabla

El ejemplo anterior devuelve un número, pero no lo almacena en ningún lugar. Existen tres patrones que conectan una secuencia con datos reales, y la elección correcta depende del grado de control que requiera la aplicación.

1) Llama a NEXTVAL directamente en la instrucción INSERT. El enfoque más explícito. La aplicación decide cuándo se consume un número.

CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE (
  EMPLOYEE_NO INTEGER NOT NULL,
  EMP_NAME    NVARCHAR(100),
  PRIMARY KEY (EMPLOYEE_NO)
);

INSERT INTO DHK_SCHEMA.EMPLOYEE
  VALUES (DHK_SCHEMA.EMP_NO.NEXTVAL, 'Anita Sharma');

2) Utilice la secuencia como valor predeterminado de la columna. El número se asigna incluso cuando la inserción no menciona la columna, lo cual resulta adecuado para aplicaciones que nunca fueron programadas para conocer la secuencia.

CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE2 (
  EMPLOYEE_NO INTEGER DEFAULT DHK_SCHEMA.EMP_NO.NEXTVAL,
  EMP_NAME    NVARCHAR(100)
);

INSERT INTO DHK_SCHEMA.EMPLOYEE2 (EMP_NAME) VALUES ('Ravi Kumar');

3) Lea el valor que se acaba de emitir. CURRVAL devuelve el último número que tomó esta sesión, que es como una fila secundaria se vincula con la fila principal que se acaba de insertar.

SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;

⚠️ Advertencia: CURRVAL falla con un error hasta que se haya llamado a NEXTVAL al menos una vez en la sesión actual. Informa el valor asignado a esta sesión, no el máximo global, por lo que dos sesiones pueden tener valores actuales diferentes al mismo tiempo.

Columna de secuencia frente a columna de identidad

SAP HANA también ofrece una columna de identidad, que genera números sin necesidad de un objeto independiente. Ambas soluciones resuelven el mismo problema de forma diferente.

Parámetro Secuencia Columna de identidad
Tipo de objeto objeto de base de datos independiente Propiedad de columna de una tabla
Compartido entre mesas Sí, cualquier número de tablas puede extraer de ella. No, pertenece a una sola columna.
Valor visible antes de la inserción Sí, a través de NEXTVAL No, se generó durante la inserción.
Definición CREAR SECUENCIA GENERADO POR DEFECTO COMO IDENTIDAD
Mejores para Numeración compartida, inserciones para padres e hijos Una clave sustituta simple en una tabla

Seleccione una secuencia cuando el número deba conocerse antes de que exista la fila, o cuando varias tablas compartan una misma serie de numeración. Elija una columna de identidad para una clave subrogada simple sin requisitos adicionales.

Gestión de secuencias: ALTER, DROP y Gaps

Una secuencia rara vez permanece como se creó inicialmente. Tres tareas de mantenimiento se repiten con frecuencia.

Cambiar el comportamiento. ALTER SEQUENCE ajusta el incremento, los límites o el ciclo de una secuencia existente sin pérdida.ping it. RESTART WITH restablece el contador, que es el paso habitual después de recargar los datos de prueba.

ALTER SEQUENCE DHK_SCHEMA.EMP_NO RESTART WITH 1000;
ALTER SEQUENCE DHK_SCHEMA.EMP_NO INCREMENT BY 10;
DROP SEQUENCE DHK_SCHEMA.EMP_NO;

Comprender las deficiencias. No se garantiza que los números de secuencia sean consecutivos, y esto sorprende a quienes esperan un registro de auditoría ininterrumpido. Las brechas aparecen por tres razones:

  • Transacciones revertidas. NEXTVAL no es transaccional. Un número utilizado por una inserción que posteriormente se revierte nunca se vuelve a emitir.
  • Almacenamiento en caché. Con CACHE 100, un nodo reserva cien valores a la vez. Un reinicio descarta lo que quede sin usar en ese bloque.
  • Sesiones simultáneas. Dos sesiones que insertan números simultáneamente intercalan sus números, por lo que ninguna ve una secuencia continua.

En la práctica, la regla general es tratar una secuencia como fuente de identificadores únicos, nunca como un contador del número de filas existentes. Cuando una serie ininterrumpida es un requisito legal, como en el caso de la numeración de facturas, debe generarse mediante la lógica de la aplicación con sus propios controles, en lugar de mediante una secuencia de base de datos.

Encontrar lo que existe. La vista del sistema SECUENCIAS enumera cada secuencia con su valor actual, que es la forma más rápida de auditar un esquema. La sintaxis relacionada se cubre en SAP HANA-SQL y definiciones de columnas en SAP Tipos de datos de HANA.

Preguntas Frecuentes

Las transacciones revertidas, los bloques en caché perdidos al reiniciar y las sesiones concurrentes generan brechas. Una secuencia garantiza la unicidad, nunca una sucesión continua de valores.

Sí. Una secuencia es independiente de cualquier tabla, por lo que varias tablas pueden utilizarla. Esto resulta útil cuando los identificadores deben ser únicos en todo un esquema, en lugar de serlo por tabla.

Sí. Analizar el rendimiento de inserción muestra cuántos valores consume un nodo entre reinicios, lo que equilibra la ganancia de velocidad del almacenamiento en caché con el tamaño de los espacios que crea.

Sí. La comparación de los valores actuales con MAXVALUE y la tasa de consumo predice el agotamiento, por lo que se amplía la secuencia antes de que las inserciones empiecen a fallar en producción.

Dado que NEXTVAL no se ha llamado en la sesión actual, CURRVAL informa del valor emitido para esta sesión, por lo que no tiene nada que informar hasta que se haya tomado uno.

Resumir este post con: