Я бы хотел запросить некоторые данные, хранящиеся в json, в реляционной таблице Oracle.
create table Foo (
id VARCHAR2(40) not null,
data CLOB,
constraint foo_pk primary key (id),
constraint foo_json_chk check (data is json)
);
insert into Foo (id, data) values ('1', '{"id": "1", "name": "bar1"}');
insert into Foo (id, data) values ('2', '{"id": "2", "name": "bar2"}');
Я могу сделать запрос из одного json, используя json_table
:
select name from json_table(
(select data from Foo where id='1'),
'$'
COLUMNS (
name PATH '$.name'
)
);
Дает
+------+
| name |
+------+
| bar1 |
+------+
Если мы попытаемся выполнить запрос из нескольких строк:
select name from json_table(
(
select data from Foo --where id='1'
),
'$'
COLUMNS (
name PATH '$.name'
)
);
Я бы хотел получить все значения, соответствующие пути json.Для данных, хранящихся выше, это будет означать:
+------+
| name |
+------+
| bar1 |
| bar2 |
+------+
Позже я объединю этот запрос в соединении с другими таблицами в системе.
К сожалению, вместо этого я получаю следующую ошибку:
ORA-01427: single-row subquery returns more than one row
Я пробовал разные комбинации NESTED PATH
и JSON_ARRAYAGG
, но пока не повезло.
Как извлечь значения из нескольких строк, используя один и тот же путь json?