You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DB2 for i中JSON_ARRAY函数自定义函数内整数引号不一致问题

DB2 for i中自定义函数内JSON_ARRAY生成字符串数组的原因及解决方法

问题根源

在DB2 for i中,顶层SQL执行环境和**SQL PL块(自定义函数/存储过程的BEGIN...END部分)**对JSON_ARRAY函数的参数处理逻辑存在差异:

  • 顶层SQL中,JSON_ARRAY会自动识别输入参数的原生数据类型(如INT),并生成对应类型的JSON元素(数值类型无引号)。
  • SQL PL块内部,未通过FORMAT JSON标记的参数,会被默认作为字符串类型进行JSON序列化,因此生成的元素会被添加引号,转成JSON字符串类型。

你测试直接转换JSON_ARRAY结果为VARCHAR正常,是因为该操作是在顶层SQL环境下完成的,遵循的是顶层的类型映射规则;而自定义函数内的JSON_ARRAY调用处于SQL PL环境,触发了不同的默认处理逻辑。

解决方法

为JSON_ARRAY的每个数值型参数添加FORMAT JSON标记,明确告知函数将参数解析为JSON原生类型而非字符串:

CREATE FUNCTION MYSCHEMA.CREATEJSONARRAY03()
RETURNS VARCHAR(512)
LANGUAGE SQL
CONTAINS SQL
BEGIN
    RETURN JSON_ARRAY(1 FORMAT JSON, 2 FORMAT JSON, 3 FORMAT JSON);
END;

执行以下语句即可得到预期的数字数组结果:

VALUES MYSCHEMA.CREATEJSONARRAY03()

结果:

00001
[1,2,3]

内容的提问来源于stack exchange,提问作者AgostinoX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:16:16