在 Oracle 12.1.0.2 中从 JSON 文件中选择嵌套信息的正确方法是什么?

What is the correct way to select nested information from a JSON file in Oracle 12.1.0.2?

提问人:Hanspeter 提问时间:8/30/2023 更新时间:8/31/2023 访问量:19

问:

我尝试从 JSON 文件中获取信息,如以下 select 语句所述。这适用于 Oracle 19 和 Oracle 12.2.0.1

with xmldata as (
  select '{
  "metaData": {
    "validForClearingDay": "2022-11-16",
    "createdStamp": "2022-11-15T16:30:17.329433+01:00"
  },
  "entries": [
    {
      "group": "01",
      "iid": 100,
      "branchId": "0000",
      "sicIid": "001008"
    },
    {
      "group": "01",
      "iid": 110,
      "branchId": "0000",
      "sicIid": "001100"
    }
  ]
}' data from dual)
select y.* from xmldata x,
  JSON_TABLE(x.data,
          '$' COLUMNS(
            validForClearingDay VARCHAR2(100) PATH '$.metaData.validForClearingDay',
            NESTED PATH '$.entries[*]'
            COLUMNS (
              "group" VARCHAR2(100) PATH '$.group',
              iid NUMBER(10) PATH '$.iid',
              branchId VARCHAR2(100) PATH '$.branchId',
              sicIid VARCHAR2(100) PATH '$.sicIid'
      ))) y

在 Oracle 12.1.0.2 中,我收到错误 ORA-00936:缺少表达式 有人知道该版本中的正确语法必须如何?

JSON Oracle 嵌套

评论

0赞 p3consulting 8/30/2023
NESTED PATH 应该在 12.1 上运行,可能是“组”的错误?尝试用不带引号的 grp 替换。
0赞 Hanspeter 8/31/2023
很好的分析,它确实是“group*”列,这似乎是该 Oracle 版本中的问题。谢谢

答:

0赞 Hanspeter 8/31/2023 #1

正如 p3consulting 所发现的那样,在 Oracle 12.1.0.2 中,使用保留字作为列名似乎是一个问题,即使将其放在引号中也是如此。

0赞 p3consulting 8/31/2023 #2

NESTED PATH 应该在 12.1 上工作,请尝试用不带引号的 grp 替换