Вы можете использовать конвейерные функции Oracle
В основном, когда вы хотите, чтобы подпрограмма PLSQL (или java или c) была «источником»
данных - вместо таблицы - вы бы использовали конвейерную функцию.
Простой пример - генерация случайных данных
Как можно создать N уникальных случайных чисел в зависимости от входного аргумента?
create type array
as table of number;
create function gen_numbers(n in number default null)
return array
PIPELINED
as
begin
for i in 1 .. nvl(n,999999999)
loop
pipe row(i);
end loop;
return;
end;
Предположим, нам для чего-то понадобилось три ряда. Теперь мы можем сделать это одним из двух способов:
select * from TABLE(gen_numbers(3));
COLUMN_VALUE
1
2
3
или
select * from TABLE(gen_numbers)
where rownum <= 3;
COLUMN_VALUE
1
2
3
конвейерные функции1
конвейерные функции2