Как извлечь запросом размер массива по ключу?
Есть таблица:
create table PARAM (
ID VARCHAR2(30), DOCUMENT blob)
Столбец Document хранит JSON вида:
{"id":"value","parameters":[{...},{...},{...}]}
Как извлечь запросом размер массива параметров?
Нужно извлечь размер массива для каждой записи в таблице, а затем просуммировать все эти значения.
Например, хотелось бы получить:
ID ARRAY_SIZE
---- ----------
1 10
2 0
3 3
TOTAL_RECORDS TOTAL_ARRAYS_SIZE
------------- -----------------
3 13
Подскажите, как это сделать?
Свободный перевод вопроса Get array size in oracle sql от участника @neo
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
При условии, что на столбце есть CHECK ограничение IS ISON, то можно воспользоваться методом size() для получения количества элементов в массиве:
create table t (
c1 int, c2 blob check (c2 is json))
/
insert into t values ( 1, '{ "arr" : [1, 2, 3] }');
insert into t values ( 2, '{ "arr" : [1, 2, 3, 4, 5] }');
insert into t values ( 2, '{ "arr" : [] }');
commit;
select count(*) count, sum (a.c2.arr.size()) total from t a;
COUNT TOTAL
---------- ----------
3 8
Свободный перевод ответа от участника @Chris Saxon