#sql #oracle #oracle12c
#sql #Oracle #oracle12c
Вопрос:
У меня есть следующее, сохраненное в базе данных Oracle в формате JSON:
{
value: [1,2,3]
}
Значение может быть любого типа (строки, целые числа или массивы). Как мне запросить, является ли тип array и содержит ли он определенное значение?
В псевдокоде:
SELECT * FROM TABLE WHERE COLUMN_NAME.value CONTAINS 2
Я могу видеть, как запрашивать строки с использованием функций Oracle, таких как json_query
, но не вижу, как выполнить этот конкретный тип запроса без выбора всех данных и поиска на клиенте.
Ответ №1:
Вы можете использовать JSON_TABLE
в FROM
, определяя столбцы, а затем использовать его в where
предложении для фильтрации строк.
--Test data
with t (id,j)
as
( select 1, TO_CLOB(
'{
value : [1,2,3]
}') FROM DUAL
)
--Test data ends--
select t.id,tbl.val FROM t cross join
json_table(j,'$.value[*]' columns (val varchar2(100) path '$') ) as tbl
where tbl.val = 2
ID VAL
------ -------
1 2
Комментарии:
1. Интересно, что когда я объединяю tbl.val с привязкой (:val), база данных сбрасывает мое соединение и выдает общую ошибку. Кто-нибудь еще сталкивался с этим? Это работает, если я использую литералы.