У меня есть таблица "move" с одним столбцом "move_doc", который является CLOB. Хранящийся внутри json имеет структуру:

{
moveid : "123",
movedate : "xyz",
submoves: [
{
submoveid: "1",
...
 },
{
submoveid : "2",
...
}
]
}

Я знаю, что могу выполнить запрос Oracle 12c, чтобы получить доступ к списку вложенных перемещений:

select move.move_doc.submoves from move move

Как мне получить доступ к определенным частям массива? А атрибуты внутри конкретного подмаха?

1
ankit 22 Фев 2016 в 23:00

2 ответа

Лучший ответ

Вы должны использовать функции Oracle json_query и / или json_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_value используется для получения скалярного значения, json_query используется для получения значений JSON. Вы также можете посмотреть на json_table, который возвращает таблицу результатов SQL и, таким образом, может использоваться в объединениях.

Дополнительные примеры см. В этом документе Oracle

2
Michael Schaefers 2 Ноя 2016 в 16:55

Из того, что я посмотрел, в Oracle вы можете индексировать «весь массив» как одну запись индекса, но не отдельные элементы массива.

Базы данных NoSQL, такие как MongoDB, Couchbase, Cassandra, имеют индексы «массив / коллекция», которые могут индексировать отдельные элементы или поля объектов в массиве и запрашивать их.

0
Keshav Murthy 30 Янв 2019 в 00:44