In Oracle 9i and previous versions you could return table from a function by creating a type and a function which returns that type as pipelined function. In Oracle databases which have lower versions than 10g we should create that object on database. And it was a bit hard when you want to change the return structure.
We had to drop that type and recreate it. In Oracle 10g and higher verions we can return table from a function by no creating any type on database. We could do this by declaring a record in package spec. The code below works on Oracle databases which have version is 10g or higher.
PACKAGE PKG_PIPELINE IS
TYPE record_type IS RECORD (
string varchar2(8192),
nmbr number,
dt date
);
TYPE tbl_record_type IS TABLE OF record_type;
function f_test(cnt in number) RETURN tbl_record_type PIPELINED;
END; -- Package spec
function f_test(cnt in number) RETURN tbl_record_type PIPELINED as
PRAGMA AUTONOMOUS_TRANSACTION;
out_rec record_type;
begin
out_rec.string := 'A';
out_rec.nmbr := 5;
out_rec.dt := sysdate;
pipe row (out_rec);
for i in 1..2*cnt loop
out_rec.string := 'B';
out_rec.nmbr := i;
out_rec.dt := sysdate-1;
pipe row (out_rec);
end loop;
return;
end;
END;
Usage
select * from table(PKG_PIPELINE.f_test(3))
No comments:
Post a Comment