Sql 如何使用Oracle 12c查询为JSON中的数组编制索引?
我有一个表“move”,其中有一列“move\u doc”,它是CLOB。存储在其中的json具有以下结构:Sql 如何使用Oracle 12c查询为JSON中的数组编制索引?,sql,json,oracle,indexing,oracle12c,Sql,Json,Oracle,Indexing,Oracle12c,我有一个表“move”,其中有一列“move\u doc”,它是CLOB。存储在其中的json具有以下结构: { moveid : "123", movedate : "xyz", submoves: [ { submoveid: "1", ... }, { submoveid : "2", ... } ] } 我知道我可以通过以下方式运行Oracle 12c查询以访问子移动列表: 从移动中选择move.move\u doc.submoves 如何访问阵列的特定子移动?以及特定子移动中的属性
{
moveid : "123",
movedate : "xyz",
submoves: [
{
submoveid: "1",
...
},
{
submoveid : "2",
...
}
]
}
我知道我可以通过以下方式运行Oracle 12c查询以访问子移动列表:
从移动中选择move.move\u doc.submoves
如何访问阵列的特定子移动?以及特定子移动中的属性?您必须使用Oracle函数
json\u query
和/或json\u value
,如下所示:
SELECT json_value(move_doc, '$.submoves[0].submoveid' RETURNING NUMBER) FROM move;
返回1
SELECT json_query(move_doc, '$.submoves[1]') FROM move;
将返回第二个JSON元素,例如
{
submoveid : "2",
...
}
json\u value
用于检索标量值,json\u query
用于检索json值。您可能还想看看json\u table
,它返回一个SQL结果表,因此可以在联接中使用
有关更多示例,请参见,在Oracle中,您可以将“整个数组”作为单个索引项进行索引,但不能对数组的单个元素进行索引
NoSQL数据库如MongoDB、Couchbase、Cassandra具有“数组/集合”索引,可以索引数组中的单个元素或对象字段并进行查询。Beda来自Oracle JSON团队 我们在21c版中添加了一个新的多值索引,允许您对JSON数组中的值进行索引。显然,21c是全新的,您想知道如何在旧版本中做到这一点:函数索引(使用JSON_Value函数)仅限于每个JSON文档的一个值,因此无法索引数组值。但是:有一个“JSON搜索索引”,它对整个JSON文档以及数组中的值进行索引。另一种解决方案是使用物化视图usign JSON_表。这将把数组值扩展成单独的行,然后你可以在该列上添加一个常规的B树索引 此处的示例代码: 带有函数索引和JSON搜索索引的JSON索引 JSON和物化视图
该链接适用于Oracle数据库12cR1。12cR2对应的单据为。