Сохраните список в переменной в Oracle SQL

#sql #oracle

Вопрос:

Как сохранить список в переменной и использовать его позже в разных частях SQL?

У меня есть такой sql, как показано на рисунке, содержимое списка дублируется. Я пытался использовать DECLARE или DEFINE , но, похоже, это не для этого случая

 SELECT 
    l.cod
FROM list l
WHERE l.cod IN ( '1999', '1998', '1997' ...) --- same list

UNION

SELECT 
   l.cod
FROM list l JOIN blablabla.... 
WHERE l.cod IN ( '1999', '1998', '1997' ...) --- same list
    
 

Как я могу решить эту проблему лучшим способом?

Комментарии:

1. Вы рассматривали возможность хранения во временной таблице?

Ответ №1:

Один из вариантов-использовать этот список в качестве «источника» для запроса, который разделит его на строки, а затем использовать этот CTE в качестве «источника № 2» для вашего текущего запроса.

Что-то вроде этого:

 with list (col) as
  -- this is your list
  (select q'['1999', '1998', '1997']' 
   from dual
  ),
splist as
  -- list, split to rows
  (select trim(regexp_substr(col, '[^,] ', 1, level)) val
   from list
   connect by level <= regexp_count(col, ',')   1
  )
-- OK, now we're set to use it
select l.cod
  from list l
  where l_cod in (select val from splist)   --> it is used here
union 
select l.cod
  from list l join blabla on a = b
  where l.cod in (select val from splist);  --> and here