DB2存储过程中获取CLOB类型JSON数组的元素数量
在DB2存储过程中获取JSON数组根元素数量的实现
方法1:使用JSON_ARRAY_LENGTH函数(DB2 11.1及以上版本支持)
直接调用DB2内置的JSON_ARRAY_LENGTH函数,将CLOB变量转换为JSON类型后传入,即可快速获取根层级数组的元素数量。
代码示例
CREATE OR REPLACE PROCEDURE GET_JSON_ARRAY_COUNT() LANGUAGE SQL BEGIN -- 声明变量 DECLARE res CLOB(5M); DECLARE counter SMALLINT; -- 模拟生成JSON数组(替换为你的实际生成逻辑) SET res = JSON_ARRAY( JSON_OBJECT('pk' VALUE 1, 'name1' VALUE 'xyz', 'name2' VALUE 2), JSON_OBJECT('pk' VALUE 2, 'name1' VALUE 'cvc', 'name2' VALUE 'vcc') ); -- 获取JSON数组元素数量并赋值给counter SET counter = JSON_ARRAY_LENGTH(CAST(res AS JSON)); -- 可选:输出验证结果 CALL DBMS_OUTPUT.PUT_LINE('数组元素数量: ' || counter); END@
方法2:使用JSON_TABLE配合COUNT(兼容较低版本DB2)
如果你的DB2版本不支持JSON_ARRAY_LENGTH,可以通过JSON_TABLE将JSON数组展开为行集,再用COUNT函数统计行数得到元素数量。
代码示例
CREATE OR REPLACE PROCEDURE GET_JSON_ARRAY_COUNT() LANGUAGE SQL BEGIN DECLARE res CLOB(5M); DECLARE counter SMALLINT; -- 模拟生成JSON数组 SET res = JSON_ARRAY( JSON_OBJECT('pk' VALUE 1, 'name1' VALUE 'xyz', 'name2' VALUE 2), JSON_OBJECT('pk' VALUE 2, 'name1' VALUE 'cvc', 'name2' VALUE 'vcc') ); -- 通过JSON_TABLE展开数组并统计数量 SELECT COUNT(*) INTO counter FROM JSON_TABLE( res, '$[*]' COLUMNS (dummy_col INT PATH '$') ) AS JT; -- 可选:输出验证结果 CALL DBMS_OUTPUT.PUT_LINE('数组元素数量: ' || counter); END@
注意事项
- 若使用
JSON_ARRAY_LENGTH,需确保DB2版本为11.1及以上;低版本优先选择方法2。 - 若CLOB变量中的JSON格式不合法,函数会抛出错误,可提前用
JSON_VALIDATE函数验证JSON有效性(可选操作)。
内容的提问来源于stack exchange,提问作者mastermistik
相关产品推荐
相关产品推荐

