【发布时间】:2021-12-28 13:42:35
【问题描述】:
我有一个具有 CLOB 数据类型的表。该列的值实际上是 JSON 数据。
{"ClassId":32000,"Attributes":
[
{"Name":"ID","Value":"4548"},
{"Name":"HREF","Value":"-1"},
{"Name":"HPRECISION","Value":"5"},
{"Name":"HMETHOD","Value":"96"},
{"Name":"GEO-METHOD","Value":"96"},
{"Name":"GEO-PRECISION","Value":"5"},
{"Name":"GEO-VISIBILITY","Value":"0"}
]
}
{"ClassId":30074,"Attributes":
[
{"Name":"ID","Value":"265794"},
{"Name":"HREF","Value":"-1"},
{"Name":"HPRECISION","Value":"5"},
{"Name":"HMETHOD","Value":"100"},
{"Name":"GEO-METHOD","Value":"90"},
{"Name":"GEO-PRECISION","Value":"5"},
{"Name":"GEO-VISIBILITY","Value":"0"}
]
}
如果我选择表格表格,它将显示如下
我需要解析数据,这样我才能得到 HMETHODE 和 HPRECISION 的输出。
Classid ID HREF HPRECISION HMETHOD
30074 265794 -1 5 96
32000 4548 -1 5 100
或者可能是下面的输出
我尝试了几种方法,但要么出错,要么找不到数据。如果有人可以修复此 sql,那将非常有帮助。
select ClassId, NAME, VALUE
from importitem D,
JSON_TABLE
(
D.JSON_DATA, '$' COLUMNS
(
ClassId NUMBER path '$.ClassId',
NESTED path '$.Attributes[*]' COLUMNS
(
NAME NUMBER PATH '$.Namne',
Value NUMBER PATH '$.Value'
)
)
) J ;
或者可能是这样,我尝试了两种不同的方式。
SELECT *
FROM JSON_TABLE(
'{"ClassId":30074,
"Attributes":
[
{"Name":"ID","Value":"356605"},
{"Name":"HREF","Value":"-1"},
{"Name":"HPRECISION","Value":"5"},
{"Name":"HMETHOD","Value":"96"},
{"Name":"GEO-METHOD","Value":"96"},
{"Name":"GEO-PRECISION","Value":"5"},
{"Name":"GEO-VISIBILITY","Value":"0"}
]
}',
'$.Attributes'
COLUMNS
ID NUMBER PATH '$.Namne.Value',
HREF NUMBER PATH '$.Namne.Value',
HPRECISION NUMBER PATH '$.Namne.Value',
HMETHOD NUMBER PATH '$.Namne.Value'
);
【问题讨论】:
-
Oracle 数据库的版本 - 它实际上是您标记的 11 吗?因为这在 12.2 和以后的版本中要容易得多。
-
谢谢,已更新
-
1)
jason_table应该是json_table。 2) 列规格应以逗号分隔:hprecision number, hmethod ...。另外请do not post images of code,它们无法使用 -
对此感到抱歉。我用代码示例更改了屏幕截图。
标签: sql json oracle oracle-sqldeveloper oracle19c