jueves, 19 de noviembre de 2009

Anidar return next

Desde hace buen tiempo tenia la necesidad de combinar datos en una especie de Recordset anidados (comparando la idea con VB6), bueno aqui el ejemplo puede que sea de utilidad, para mi si lo es.

CREATE OR REPLACE FUNCTION numera()
RETURNS SETOF record AS
$BODY$

declare
record1 record;
record2 record;
begin

FOR record1 IN execute 'select cast(' || quote_literal('A') || ' as text), orden from generate_series(0,100,10) orden;' LOOP

return next record1;
FOR record2 IN execute 'select cast(' || quote_literal('B') || ' as text), orden2 from generate_series(' || record1.orden + 1 || ',' || record1.orden + 9 || ') orden2;' LOOP
return next record2;
end loop;
end loop;

return;

end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;


select * from numera() as (letra text, orden integer)

Continúa...