暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 11g用Json字段选择查询

ASKTOM 2020-04-02
2870

问题描述

我想从下面的表格中获取数据。

表名: 洞察

Id  |  Name      |  JSON_DATA
----+------------+-------------------------------------------------------------
1   |  Sitansu.  |  {"country_codes": ["IND"],  "regions": ["ASIA"]}
2   |  Sitansu.  |  {"country_codes": ["IND","USA"],  "regions": ["ASIA","NA"]}
复制


如何根据 “NA” 等区域从该洞察表中获取数据。但我不想通过使用like query来获取数据。

示例: country_codes = = IND然后它应该按照上表示例显示2条记录。另外,我想获取具有多个国家代码的数据。

Oracle版本:

甲骨文数据库11g企业版11.2.0.4.0-64位生产
PL/SQL版本11.2.0.4.0-生产
核心11.2.0.4.0生产
适用于Solaris的TNS: 版本11.2.0.4.0-生产
NLSRTL版本11.2.0.4.0-生产

专家解答

在11g上,您的选择是有限的。安装APEX可能是最简单的,因此您可以使用APEX_JSON。

这包括一个JSON到XML的转换函数。通过将数据传递给该数据,您可以使用XMLTable提取相关字段。这会进行XML到关系的转换。所以你可以像常规列一样查询数据:

create table t (
  c1 int, json_data varchar2(100)
);

insert into t values ( 1, '{"country_codes": ["IND"], "regions": ["ASIA"]}' );
insert into t values ( 2, '{"country_codes": ["IND","USA"], "regions": ["ASIA","NA"]}' );
commit;

select * 
from   t, xmltable(
  '/json/regions/row'
  passing apex_json.to_xmltype ( json_data )
  columns
    code varchar2(100) path '/'
) x
where  x.code = 'NA';

C1    JSON_DATA                                                     CODE   
    2 {"country_codes": ["IND","USA"], "regions": ["ASIA","NA"]}    NA  
复制


但实际上,如果你正在做大量的JSON处理,你应该升级,这样你就可以使用内置的JSON函数。例如,JSON_table:

select * 
from   t, json_table (
  json_data, '$.regions[*]'
  columns (
    code path '$'
  )
) j
where  j.code = 'NA';

C1    JSON_DATA                                                     CODE   
    2 {"country_codes": ["IND","USA"], "regions": ["ASIA","NA"]}    NA   
复制

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论