Как извлечь запросом размер массива по ключу?

Есть таблица:

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

→ Ссылка