выберите строки и столбцы из всех таблиц, в которых есть столбец, имя которого начинается с «ТЕСТ» - PullRequest
0 голосов
/ 29 мая 2019

У меня есть несколько таблиц, содержащих различное количество столбцов, имя которых начинается с TEST:

Вот пример того, что я хотел бы увидеть, если бы я выполнил код:

TEST2UFLG TEST3UFLG TEST4UFLG TEST5UFLG TEST6UFLG 
--------- --------- --------- --------- ---------
0         1         0         1         0
... (rows elided)
0         1         0         1         0

Это мой запрос, который возвращает метаданные, которые я использовал бы для построения запроса для каждой таблицы, содержащей такие столбцы.

select
  ( 
    select
      to_char(wm_concat(column_name)) 
    from
      dba_tab_columns 
    where
      owner = 'XXX' 
      and table_name = 'TBLXXXX' 
      and column_name like '%TEST%'
  )
from
  XXX.TBLXXXX

Чего я не знаю, так это как написать код, который будет использовать эти данные для генерации оператора select (или операторов), который затем будет выполнен для возврата нужных мне строк.

1 Ответ

2 голосов
/ 29 мая 2019

Один из вариантов - создать динамическое представление

DECLARE
     v_select   CLOB;
BEGIN
     SELECT
          'SELECT '||LISTAGG(column_name,',')  
              WITHIN GROUP (ORDER BY column_id) ||' FROM ' || table_name
         INTO v_select
     FROM all_tab_columns 
        where owner = 'XXX' 
         and table_name = 'TBLXXXX' 
      and column_name like '%TEST%'
      group by table_name;
     IF
          v_select IS NOT NULL
     THEN
          EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW v_testtbl as ' || v_select;
     END IF;
END;
/

DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...