PIPE ROW vs. RETURN

--Eugene--
Дата: 26.03.2011 00:09:29
create table t1 as select level as id, 'some name ' || level as name from dual connect by level < 100;

create type o1 as object (id number, name varchar2(10));

create type c1 as table of o1;

Есть два варианта:

1
create or replace function f1
	return c1
	pipelined
as
begin
	for i in
	(
		select id, name
			from t1
	)
	loop
		pipe row (o1(i.id, i.name));
	end loop;
end;

2
create or replace function f2
	return c1
as
	c c1;
begin
	select o1(id, name)
		bulk collect into c
		from t1;
	return c;
end;

по-вашему, который лучше?
-2-
Дата: 26.03.2011 00:34:21
--Eugene--,

Select * from t1;
Elic
Дата: 26.03.2011 00:37:01
--Eugene--
по-вашему, который лучше?
Скотч или виски - что лучше?
--Eugene--
Дата: 26.03.2011 00:39:25
Elic,

тоесть без разницы?
--Eugene--
Дата: 26.03.2011 00:40:59
-2-
Select * from t1;
- это третий вариант (не спорю, вариант хороший), но я просил выбрать из двух предложенных
_Nikotin
Дата: 26.03.2011 00:43:07
Конкретнее опишите ситуацию в которой хотите использовать табличные функции.
Elic
Дата: 26.03.2011 00:45:01
--Eugene--
тоесть без разницы?
Когда цель потерять память и нет ограничений по времени или объёму, то да.
Но одни предпочитают одно, другие - другое, а третие в зависимости от.
--Eugene--
Дата: 26.03.2011 00:51:45
_Nikotin,

есть таблица - "журнал событий"
(seq integer, transaction_id integer, code integer, message varchar2(4000), ....)

seq - секвенция, уникальный ключ
transaction_id - идентификатор "транзакции" (ничего общего с оракловыми транзакциями не имеет)
каждая "транзакция" имеет уникальный идентификатор и может вставить несколько записей в таблицу-журнал.

допустим, дано какое-то значение SEQ, и нужно получить все записи транзакции, к которой принадлежит это SEQ.

собственно, вот
--Eugene--
Дата: 26.03.2011 00:55:25
дополню:

просто селект выходит слишком громоздкий, поэтому нужна функция
_Nikotin
Дата: 26.03.2011 00:56:13
С pipeline для тестов можно быстренько набросать пакет с type table of %rowtype, не заморачиваясь самому с созданием SQL-ных типов.