Estoy trabajando en una aplicación multiproceso que utiliza DB2 para su base de datos primaria. En el pasado, utilizamos principalmente columnas de identidad para las tablas en las que necesitábamos un identificador único generado automáticamente. Para ello se correría el siguiente 2 consultas en la misma transacción:Cómo obtener un valor de secuencia de DB2 en una aplicación multiproceso
INSERT INTO tbname (IDENTITY_COL, ...) VALUES (DEFAULT, ...);
SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1;
Nosotros ahora están siendo presionados para cambiar a la secuencia en su lugar. Sé que puede usar "VALOR PRÓXIMO PARA colname" en las instrucciones INSERT y SELECT, pero no entiendo cómo INSERTAR y SELECCIONAR con el mismo valor sin arriesgar una condición de carrera en una aplicación multiproceso. Por ejemplo, si uso:
INSERT INTO tbname (SEQUENCE_COL, ...) VALUES (NEXT VALUE FOR SEQUENCE_COL, ...);
SELECT PREVIOUS VALUE FOR SEQUENCE_COL;
Entonces existe la posibilidad de otro inserto se llevó a cabo entre el inserto y SELECT anterior, por lo tanto, me proporciona el valor incorrecto. Si trato:
SELECT NEXT VALUE FOR SEQUENCE_COL;
tienda el valor de una variable y pasar de que en el prospecto:
INSERT INTO tbname (SEQUENCE_COL, ...) VALUES (variable_value, ...);
A continuación, hay una posibilidad de que otro hilo tiene el mismo NEXT VALUE y trata de insertar el mismo valor , lo que da como resultado un error DB2 -803. ¿Es posible usar columnas de SECUENCIA en un entorno multiproceso, o tengo que pelear para mantener mis columnas de IDENTIDAD?
Muchas gracias por proporcionarnos la aclaración específica de la conexión. Exactamente lo que necesitaba escuchar. –