如何从Oracle JSON列获取数组索引?

Jua*_*oza 1 oracle json oracle12c

拥有这样的JSON(我知道JSON不支持注释.在这种情况下用于说明这个想法):

{
    "people": [
        {                       --//  <-- index 0
            "id": 100,
            "name": "John Doe"
        },
        {                       --//  <-- index 1
            "id": 101,
            "name": "Jane Roe"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我们可以从数组中的特定元素中选择值,如下所示:

SELECT name
FROM JSON_TABLE(
    '{
        "people": [
            {
                "id": 100,
                "name": "John Doe"
            },
            {
                "id": 101,
                "name": "Jane Roe"
            },
        ]
    }', '$.people[*]' 
    COLUMNS(
        ID      NUMBER      PATH '$.id',
        NAME    VARCHAR2    PATH '$.name'
    )
) info
WHERE info.id = 101
Run Code Online (Sandbox Code Playgroud)

结果:

NAME
--------
Jane Roe
Run Code Online (Sandbox Code Playgroud)

有没有办法在数组中获取元素索引?就像是:

SELECT array_index    --//  <-- how get the array index of the element found?
FROM JSON_TABLE(
--// ...
) info
WHERE info.id = 101
Run Code Online (Sandbox Code Playgroud)

结果:

ARRAY_INDEX
-----------
1
Run Code Online (Sandbox Code Playgroud)

可以使用Oracle 12c中的JSON支持执行类似的操作吗?

Ale*_*rev 5

COLUMNS(
        idx FOR ORDINALITY,
        ID      NUMBER      PATH '$.id',
        NAME    VARCHAR2    PATH '$.name'
)
Run Code Online (Sandbox Code Playgroud)

应该适合你

  • 答案是正确的,`(idx-1)`总是给出所需的索引.顺便说一句,在12.1.0.2.0中要小心`for ordinality`.有一个需要补丁的错误https://support.oracle.com/rs?type=patch&id=20885778在12.2中它运行正常 (2认同)