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

