Как получить без цикла сумму списка атрибутов полученного из JSON?
Можно ли получить сумму списка атрибутов полученного из JSON без цикла?
Пробую SUM с функцией JSON_QUERY:
DECLARE
data varchar2(200);
json varchar2 (4000) := '
{"Implement_Details": [
{
"Hours": "100",
"Implement1": "Laser Leveler"
},
{
"Hours": "400",
"Implement1": "Trolley"
},
{
"Hours": "100",
"Implement1": "Cultivator"
}
]}';
BEGIN
SELECT SUM(JSON_QUERY(json, '$.Implement_Details[*].Hours' WITH ARRAY WRAPPER)) INTO data
FROM dual;
DBMS_OUTPUT.PUT_LINE(data);
END;
Но получаю ошибку:
Error report -
ORA-01722: invalid number
Ожидаемый результат: 100 + 400 + 100 = 600
Свободный перевод вопроса Can We get sum of list attributes in oracle without loop? от участника @NIKHIL KULSHRESTHA
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Функция SUM() ожидает значения в табличной форме, а JSON_QUERY возвращает список атрибутов как список JSON, то есть, строку [100, 400, 100].
Надо воспользоваться JSON_TABLE. Как то так:
var rc refcursor
declare
doc varchar2 (4000) := '
{"Implement_Details": [
{"Hours": "100", "Implement1": "Laser Leveler"},
{"Hours": "400", "Implement1": "Trolley"},
{"Hours": "100", "Implement1": "Cultivator"}
]}';
begin
open :rc for
select sum (val) sum
from json_table (doc, '$.Implement_Details[*].Hours'
columns (val int path '$'));
end;
/
SUM
----------
600