我一直在尝试创建一个使用音序器返回新角色 ID 的函数。然而,似乎 DB2 不允许在 CREATE FUNCTION 语句中使用它。我很难理解他们为什么要这样做,他们唯一的文件是:
不能在以下位置指定 NEXT VALUE 和 PREVIOUS VALUE 表达式 (SQLSTATE 428F9):
是否有任何替代方法可以完成以下线程安全且不密集处理?
CREATE SEQUENCE qgpl.someid AS BIGINT CACHE 100;
和功能:
CREATE OR REPLACE FUNCTION qgpl.GetNextMandateNumber ()
RETURNS CHAR(35)
BEGIN
RETURN RIGHT('00000000000000000000000000000000000' ||
VARCHAR(NEXT VALUE FOR qgpl.someid), 35);
END;
我想到的最好的选择是有一个包含当前序列号的额外表。然后只需调整函数以使用它而不是定序器(我会在读取稳定性隔离级别下选择当前值以确保它是多线程安全的)。