为什么 CREATE FUNCTION 语句中不允许使用 NEXT VALUE?

Why isn't NEXT VALUE allowed in CREATE FUNCTION statements?

我一直在尝试创建一个使用音序器 return 新角色 ID 的函数。但是,似乎 DB2 不允许在 CREATE FUNCTION 语句中使用它。我很难理解他们为什么要这样做,他们拥有的唯一文档是:

NEXT VALUE and PREVIOUS VALUE expressions cannot be specified (SQLSTATE 428F9) in the following places:

是否有任何替代方法来完成以下线程安全且不密集的处理?

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;

我想到的最佳选择是有一个额外的 table 来包含当前序列号。然后只需调整函数以使用它而不是定序器(我会 select 读取稳定性隔离级别下的当前值以确保它是多线程安全的)。

我仍然不确定为什么 CREATE FUNCTION 不允许使用 NEXT VALUE,但是在 mustaccio showed me the DIGITS() built-in function I will be using that as a solution as it is much neater than my RIGHT() built-in function 使用之后。

正在创建音序器:

CREATE SEQUENCE someid AS DECIMAL(35) CACHE 100

用法示例:

VALUES (DIGITS(NEXT VALUE FOR someid))

结果:

"00000000000000000000000000000000001"