Выбрать строки и столбцы из всех таблиц, в которых есть столбец, имя которого начинается с «TEST»

У меня есть несколько таблиц, содержащих разное количество столбцов, имя которых начинается с 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 (или операторов), который затем будет выполняться для возврата нужных мне строк.

Может быть, кто-то может помочь вам. Я понятия не имею, что вы спрашиваете.

alexherm 29.05.2019 03:04

Начиная с Oracle 9i есть Динамический SQL, но вам нужно использовать PL/SQL, а не чистый SQL. Это то, что вам нужно?

Abra 29.05.2019 03:14

Я прочитал все ваши слова, но я не знаю, что они означают. Вы начинаете с «У меня есть таблица а, в которой перечислены…», а затем ваше следующее предложение звучит так: «Поскольку таблица каждый содержит…» Вы вообще говорите об одних и тех же таблицах? Пожалуйста, помните, что никто не может читать мысли другого человека; мы можем исходить только из того, что вы записываете словами.

mathguy 29.05.2019 03:32
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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;
/

ДЕМО

Другие вопросы по теме