"У меня нет названия стола
сразу! Они хранятся в другом
стол "
Oracle не делает такого рода вещи в SQL. Вам нужно будет использовать PL / SQL и собрать динамический запрос.
create or replace function get_dynamic_rows
return sys_refcursor
is
stmt varchar2(32767) := null;
return_value sys_refcursor;
begin
for r in ( select table_name from your_table )
loop
if stmt is not null then
stmt := stmt||' union all ';
end if;
stmt := stmt||'select * from '||r.table_name;
end loop;
open return_value for stmt;
return return_value;
end;
/
Это соберет запрос, подобный этому
select * from table_1 union all select * from table_2
UNION ALL - это оператор набора, который объединяет вывод нескольких запросов в один набор результатов без удаления дубликатов. Столбцы в каждом запросе должны совпадать по числу и типу данных.
Поскольку сгенерированный оператор будет выполняться автоматически, его форматирование не имеет смысла (если только фактические биты запроса не являются более сложными, и вам, возможно, потребуется отладить его).
Ref Cursors - это PL / SQL-проекты, эквивалентные JDBC или .Net ResultSets. Узнайте больше .