如何使用 Oracle 12c 获取存储为 CLOB 的 JSON 数组中的元素数量?

问题描述 投票:0回答:3

我将 java 类 A 作为 A_DOC 存储在数据库的 clob 列中。

A的结构如下:

{

id : 123

var1: abc

subvalues : [{

 id: 1 
 value : a

 },
{
id: 1

value :b
}

...

}
]}

我知道我可以做类似的事情

select json_query(a.A_DOC, '$.subvalues.value') from table_name a;

等等,但是我如何寻找一种通过 sql 查询来计算子值数组中元素数量的方法。这可能吗?

json oracle oracle12c
3个回答
13
投票

该函数仅存在于 Oracle 18 中

SELECT json_query('[19, 15, [16,2,3]]','$[*].size()' WITH ARRAY WRAPPER)  FROM dual;

SELECT json_value('[19, 15, [16,2,3]]','$.size()')  FROM dual;

9
投票

您可以使用JSON_TABLE:

SELECT
    id, var1, count(sub_id) subvalues
FROM
    JSON_TABLE (
        to_clob('{ id: 123, var1: "abc", subvalues : [{ id: 1, value: "a", }, { id: 2, value: "b" } ]}'),
        '$'
        COLUMNS (
            id NUMBER PATH '$.id',
            var1 VARCHAR PATH '$.var1',
            NESTED PATH '$.subvalues[*]'
            COLUMNS (
                sub_id NUMBER PATH '$.id'
            )
        )
    )
GROUP BY id, var1 

0
投票

对于 PL/SQL,您可以使用:

DECLARE
    arrSize NUMBER;
BEGIN
    -- Retrieve the size of the JSON array
    SELECT JSON_VALUE(json_value, '$.subvalue.size()')
    INTO arrSize
    FROM dual;

    -- Use arrSize as needed
    DBMS_OUTPUT.PUT_LINE('Size of the JSON array: ' || arrSize);
END;
© www.soinside.com 2019 - 2024. All rights reserved.