Вы можете использовать динамический SQL. Создайте функцию, которая принимает имя таблицы, владельца, тип данных, выполняет внутренний запрос и возвращает разделенный запятыми список имен столбцов или таблицу массивов, если вы предпочитаете. Затем создайте внешний запрос и выполните его с execute immediate
.
CREATE FUNCTION get_column_list(
table_name IN varchar2,
owner_name IN varchar2,
data_type IN varchar2)
RETURN varchar2
IS
BEGIN
...... (get columns and return comma-separated list)
END;
/
Если ваша функция возвращает список через запятую, вы можете вставить его в строку:
execute immediate 'select ' || get_column_list(table_name, owner_name, datatype) || ' from ' || table_name
По общему признанию, я давно играл с oracle, так что, может быть, я немного отстал, но я уверен, что это вполне выполнимо.