Как создать запрос на выборку для таблицы на основе значения другой таблицы в Oracle - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть две таблицы A и B.

Таблица A имеет следующую структуру:

col1 | col2 | col3 | col4 | col5 | ....

В таблице B есть только одна запись со множеством столбцов, например (всего 5):

c1 c2 c3 c4 c5 ...
-- -- -- -- --
 1  0  1  1  0 ...

Теперь я хочу динамически генерировать запрос в хранимой процедуре на основе значения строки таблицы B. Выбирайте только те столбцы, которые имеют соответствующее значение 1.

Пример 1: Для указанного выше запроса на запись будет выглядеть так:

select col1,
       col3,
       col4
from A; 

Пример 2: Если запись в B похожа на приведенную ниже

c1 c2 c3 c4 c5 ...
-- -- -- -- --
 0  0  1  1  0 ...

Для указанного выше запроса на запись будет выглядеть так:

select col3,
       col4
from A;

1 Ответ

0 голосов
/ 09 ноября 2018

Не очень хороший дизайн таблицы для хранения столбцов в качестве значений поиска. Вы можете достичь этого, используя UNPIVOT, но отображение должно быть явно указано.

SELECT 
     'SELECT ' ||LISTAGG(
          CASE
               WHEN col = 1 THEN val
          END,',') WITHIN GROUP(
          ORDER BY col
     ) ||' FROM A' as query
  FROM b UNPIVOT ( col
       FOR val
  IN ( c1 as 'COL1',
       c2 as 'COL2',
       c3 as 'COL3',
       c4 as 'COL4',
       c5 as 'COL5') );

демо

...