【问题标题】:Extract text from a CLOB datatype field in Oracle table从 Oracle 表中的 CLOB 数据类型字段中提取文本
【发布时间】:2020-05-24 01:03:16
【问题描述】:

有人可以建议如何从下面的字段中提取文本吗?它是一个 JSON 文件,作为 CLOB 数据类型字段存储在 Oracle 表中。

字段名称为Rules,其值如下:

{
   "condition":[
      {
         "name":"",
         "property":"ipaddress",
         "type":"range",
         "operator":"range",
         "start":"2.117.11.1",
         "end":"2.117.11.254"
      }
   ],
   "operator":{
      "property":"or"
   },
   "outcome":{
      "name":"BRSBRS",
      "reason":"Site was created on Fri Apr 20 2018 09:45:46 GMT+0100 (GMT Daylighttime)"
   }
}

我想从上面的两个不同字段中提取两个IP地址,如下所示:

【问题讨论】:

  • 这看起来像一个 JSON 文档,但它不是(无论如何都不是有效的)。 “条件”后面应该有一个冒号。这是您的错字,还是字符串真的缺少它?如果字符串不是有效的 JSON 文档,则需要使用正则表达式;这将是一团糟。

标签: json oracle oracle11g


【解决方案1】:

假设您的字符串中有错字,实际上它是一个有效的 JSON 文档(意思是:您在 "condition" 之后缺少一个冒号,您可以使用自 Oracle 12.1 起可用的 json_table() 函数.

create table tbl (id number primary key, rules clob);
insert into tbl (id, rules) 
  select 1001,  '{"condition":[{"name":"","property":"ipaddress","type":"range","operator":"range","start":"2.117.11.1","end":"2.117.11.254"}],"operator":{"property":"or"},"outcome": {"name":"BRSBRS","reason":"Site was created on Fri Apr 20 2018 09:45:46 GMT+0100 (GMT Daylighttime)"}}'
  from   dual;

select id, start_ip_address, end_ip_address
from   tbl,
       json_table(rules format json, '$.condition[*]'
           columns start_ip_address varchar2(19) path '$.start',
                   end_ip_address   varchar2(19) path '$.end'
      )
;

  ID  START_IP_ADDRESS  END_IP_ADDRESS
----  ----------------  ----------------
1001  2.117.11.1        2.117.11.254

【讨论】:

  • 感谢您的时间和回复,我在下面构建了 SQL,但出现以下错误 SQL: SELECT SITE_ID, START_IP_ADDRESS, END_IP_ADDRESS FROM EXTRACT_IP_ADDR, json_table(RULES format json, '$.condition[*]' columns start_ip_address varchar2(100) path '$.start', end_ip_address varchar2(100) path '$.end'); 错误ORA-00933:SQL 命令未正确结束 00933. 00000 - “SQL 命令未正确结束” *原因:*操作:第 9 行第 16 列错误我在这里失踪,请告知?
  • 我使用的是Oracle 11g 版本,有这个问题吗,听说11g 不支持Jason?如果这是真的,请告诉我如何解决这种情况以获得解决方案?
  • @user10531062 - 这绝对是个问题; Oracle 12.1 版之前不支持 JSON。这就是为什么用您在此处(或其他任何地方)提出的每个问题来说明您的 Oracle 版本如此重要的原因。最好的选择是至少升级到 Oracle 12.1。否则你需要用正则表达式来解决;无论您多么仔细地编写和测试,该解决方案都容易出错。
猜你喜欢
  • 2023-02-23
  • 2011-06-20
  • 2018-02-23
  • 2015-06-12
  • 2015-12-21
  • 2015-07-24
  • 2014-01-24
  • 2015-11-21
  • 1970-01-01
相关资源
最近更新 更多