Oracle 19c中统计CLOB类型JSON数组元素数量的最优方法
更优的JSON数组元素计数方法(Oracle 19c)
你当前用正则的方法虽然能得到结果,但存在不少局限性:比如数组元素间有空格/换行、或者嵌套JSON结构时,正则匹配会出错;而且处理大CLOB时,正则的效率远不如Oracle原生的JSON处理函数。
推荐以下两种更可靠高效的实现方式:
方法一:使用JSON_ARRAY_LENGTH函数(最直接)
Oracle 12cR2及以上版本(包括19c)提供了专门的JSON_ARRAY_LENGTH函数,直接获取JSON数组的元素个数,完全适配合法JSON格式的各种写法:
-- 如果列已被标记为JSON类型(带IS JSON约束) SELECT JSON_ARRAY_LENGTH(c1) AS array_count FROM t1; -- 如果列未标记JSON类型,显式指定格式 SELECT JSON_ARRAY_LENGTH(c1 FORMAT JSON) AS array_count FROM t1;
方法二:通过JSON_TABLE展开后计数
如果需要同时验证JSON合法性,或者后续要对数组元素做其他操作,可以用JSON_TABLE展开数组后统计行数:
SELECT COUNT(*) AS array_count FROM t1, JSON_TABLE(c1 FORMAT JSON, '$[*]' COLUMNS (dummy PATH '$')) jt;
这两种方法的优势:
- 原生JSON函数是Oracle针对JSON数据优化过的,处理速度比正则快很多
- 能正确解析所有符合标准的JSON格式,不会因为空格、换行、嵌套结构等细节导致计数错误
- 具备JSON格式校验能力,若CLOB内容不是合法JSON,会返回明确的错误提示(而非错误的计数结果)
内容的提问来源于stack exchange,提问作者Vinoth Karthick
相关产品推荐
相关产品推荐

