У меня есть несколько столбцов в моей базе данных Oracle, которые содержат json, и для извлечения данных в запросе я использую REGEXP_SUBSTR
.
В следующем примере value
— это столбец в таблице DOSSIER
, содержащий json. Регулярное выражение извлекает значение свойства client.reference
в этом json
SELECT REGEXP_SUBSTR(value, '"client"(.*?)"reference":"([^"]+)"', 1, 1, NULL, 2) FROM DOSSIER;
Итак, если json выглядит так:
[...],
"client": {
"someproperty":"123",
"someobject": {
[...]
},
"reference":"ABCD",
"someotherproperty":"456"
},
[...]
SQL-запрос вернет ABDC
.
Моя проблема в том, что у некоторых json есть несколько экземпляров клиента, например:
[...],
"contract": {
"client":"Name of the client",
"supplier": {
"reference":"EFGH"
}
},
[...],
"client": {
"someproperty":"123",
"someobject": {
[...]
},
"reference":"ABCD",
"someotherproperty":"456"
},
[...]
Вы поняли проблему, теперь SQL-запрос вернет EFGH
, что является ссылкой поставщика.
Как я могу убедиться, что ссылка содержится в клиенте объекта json?
РЕДАКТИРОВАТЬ: я на Oracle 11g, поэтому я не могу использовать JSON API, и я хотел бы избежать использования стороннего пакета