У меня есть несколько таблиц, содержащих разное количество столбцов, имя которых начинается с 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 (или операторов), который затем будет выполняться для возврата нужных мне строк.
Начиная с Oracle 9i есть Динамический SQL, но вам нужно использовать PL/SQL, а не чистый SQL. Это то, что вам нужно?
Я прочитал все ваши слова, но я не знаю, что они означают. Вы начинаете с «У меня есть таблица а, в которой перечислены…», а затем ваше следующее предложение звучит так: «Поскольку таблица каждый содержит…» Вы вообще говорите об одних и тех же таблицах? Пожалуйста, помните, что никто не может читать мысли другого человека; мы можем исходить только из того, что вы записываете словами.
Один из вариантов — создать динамическое представление.
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;
/
Может быть, кто-то может помочь вам. Я понятия не имею, что вы спрашиваете.