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