从SQL列提取JSON值

  • 本文关键字:JSON 提取 SQL oracle
  • 更新时间 :
  • 英文 :


我有一个表,我们称它为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

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

您需要始终使用父节点来获取子节点

正如您在工作查询中看到的,为了获得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
APPLICATIONMNU tbody> <<tr>"1.0.0""Testing"

最新更新