oracle 从SQL列中提取JSON值

rlcwz9us  于 2023-04-05  发布在  Oracle
关注(0)|答案(1)|浏览(242)

我有一个表,我们称之为Table_One。在Table_One中,我有一个名为LOG_TX的列,它存储为CLOB数据类型。我不确定这是否重要,但在DDL中,它也被用作store as SECUREFILE
LOG_TX中,我的数据看起来像这样(在文本编辑器中解析出来以便于阅读):

{
     "EventInfo":
     {
          "PayloadVers":"1.0.0",
          "ApplicationMnu":"Testing"
    }
}

我想写一个SQL查询,它会产生以下输出:

PayloadVers     ApplicationMnu
1.0.0           Testing

我试过使用JSON_TABLE函数。
下面是我到目前为止使用过的查询,但它只产生NULL值:

select
      jt.Payload_Version
 from
      Table_One a,
 JSON_TABLE(a.LOG_TX, '$.EventInfo.PayloadVers'
 COLUMNS (Payload_Version varchar(255) format JSON PATH '$.EventInfo.PayloadVers')) as jt

我做错了什么?请注意,我不想尝试所有列,直到我至少可以让第一个先给予我一些东西。

rqenqsqc

rqenqsqc1#

您需要始终使用父节点来获取子节点
正如您在工作查询中看到的,为了获取Payload_Version,我们在JSON_tABLE中使用'$.EventInfo',它是Payload_Version的父节点

select
      jt.Payload_Version,
   jt.ApplicationMnu
 from
      Table_One a,
 JSON_TABLE(a.LOG_TX, '$.EventInfo'
 COLUMNS (Payload_Version varchar(255) format JSON PATH '$.PayloadVers'
   ,ApplicationMnu varchar(255) format JSON PATH '$.ApplicationMnu')
   ) as jt
有效载荷_版本应用MNU
“1.0.0版”“测试”

fiddle

相关问题