从Oracle中的多个json检索值

时间:2019-02-21 16:27:54

标签: json oracle oracle12c

我想查询存储在关系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 PATHJSON_ARRAYAGG的不同组合,但到目前为止还没有运气。

如何使用相同的json路径从几行中提取值?

1 个答案:

答案 0 :(得分:1)

在json_table表达式中不需要子查询。在from子句中列出您的源表:

select name 
from   foo, json_table(
  data , '$'
  columns (
    name PATH '$.name'
    )
);

NAME   
bar1   
bar2