我正在使用DB2作爲其主數據庫的多線程應用程序。在過去,我們主要將Identity列用於需要自動生成的唯一標識符的表。要做到這一點,我們將運行在2個查詢在同一事務:如何在多線程應用程序中獲取DB2序列值
INSERT INTO tbname (IDENTITY_COL, ...) VALUES (DEFAULT, ...);
SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1;
我們現在正被迫改用序列代替。我知道你可以在INSERT和SELECT語句中使用「colname」的下一個值,但我無法弄清楚如何同時使用INSERT和SELECT,而不會冒險處理多線程應用程序中的爭用條件。例如,如果我使用:
INSERT INTO tbname (SEQUENCE_COL, ...) VALUES (NEXT VALUE FOR SEQUENCE_COL, ...);
SELECT PREVIOUS VALUE FOR SEQUENCE_COL;
還有一種可能性,另一INSERT,在前述INSERT和SELECT之間運行,因此我提供了不正確的值。如果我嘗試:
SELECT NEXT VALUE FOR SEQUENCE_COL;
存儲在一個變量和值傳遞到INSERT:
INSERT INTO tbname (SEQUENCE_COL, ...) VALUES (variable_value, ...);
還有一種可能性,另一個線程得到了相同的NEXT值,並試圖插入相同的值,導致DB2 -803錯誤。是否可以在多線程環境中使用SEQUENCE列,還是需要爭取保留我的IDENTITY列?
非常感謝您提供連接特定的說明。正是我需要聽到的。 –