Я работаю над многопоточным приложением, которое использует DB2 в качестве своей основной базы данных.В прошлом мы в основном использовали столбцы Identity для таблиц, где нам требовался автоматически генерируемый уникальный идентификатор.Для этого мы выполнили бы 2 запроса в одной и той же транзакции:
INSERT INTO tbname (IDENTITY_COL, ...) VALUES (DEFAULT, ...);
SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1;
Теперь нас заставляют переключиться на последовательность.Я знаю, что вы можете использовать «СЛЕДУЮЩЕЕ ЗНАЧЕНИЕ ДЛЯ colname » как в операторах INSERT, так и в SELECT, но я не могу понять, как использовать INSERT и SELECT с одинаковыми значениями, не рискуя состязанием в многопоточном приложении.,Например, если я использую:
INSERT INTO tbname (SEQUENCE_COL, ...) VALUES (NEXT VALUE FOR SEQUENCE_COL, ...);
SELECT PREVIOUS VALUE FOR SEQUENCE_COL;
Тогда есть вероятность, что между INSERT и SELECT был запущен другой INSERT, что дает мне неправильное значение.Если я попытаюсь:
SELECT NEXT VALUE FOR SEQUENCE_COL;
сохранить значение в переменной и передать его в INSERT:
INSERT INTO tbname (SEQUENCE_COL, ...) VALUES (variable_value, ...);
Тогда есть вероятность, что другой поток получит то же СЛЕДУЮЩЕЕ ЗНАЧЕНИЕ и попытаетсявведите то же значение, что приведет к ошибке DB2 -803.Можно ли использовать столбцы SEQUENCE в многопоточной среде или мне нужно бороться, чтобы сохранить мои столбцы IDENTITY?