如何使用 Oracle 12c 获取存储为 CLOB 的 JSON 数组中的元素数?
How to get the number of elements in a JSON array stored as CLOB with Oracle 12c?
我将 java class 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_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
该函数仅在 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;
我将 java class 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_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
该函数仅在 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;