Массив поиска Oracle в пределах значений JSON?

#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), база данных сбрасывает мое соединение и выдает общую ошибку. Кто-нибудь еще сталкивался с этим? Это работает, если я использую литералы.