我想查询存储在关系Oracle表中的json中的一些数据。
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_table
从一个json查询:
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路径从几行中提取值?
答案 0 :(得分:1)
在json_table表达式中不需要子查询。在from子句中列出您的源表:
select name
from foo, json_table(
data , '$'
columns (
name PATH '$.name'
)
);
NAME
bar1
bar2