Một giải pháp khả thi (cuối cùng có thể được đơn giản hóa) là sử dụng một hàm bảng để xử lý con trỏ và thêm giá trị hàm.
Giả sử hàm trả về sys_refcursor được gọi là get_cur
và con trỏ bao gồm cột ID, NAME
(điều này quan trọng vì hàm bảng yêu cầu định nghĩa kiểu).
Bạn khai báo TYPE cho hàng (bao gồm cả cột đường dẫn bổ sung) và cho bảng kết quả.
create type t_row is object
( id number(10),
name varchar2(10),
path varchar2(10)
);
/
create type t_rows is table of t_row;
/
và xác định hàm bảng tìm nạp con trỏ và thêm lệnh gọi hàm.
create or replace function get_cur2 return
t_rows
PIPELINED
as
cv_out sys_refcursor;
id number;
name varchar2(100);
begin
cv_out := get_cur;
loop
FETCH cv_out INTO id, name;
exit when cv_out%NOTFOUND;
pipe row(t_row(id,name, GetRegionPath(id)));
end loop;
close cv_out;
return;
end;
/
Bây giờ bạn có thể chọn dữ liệu từ hàm bảng
select * from table(get_cur2);
ID NAME PATH
---------- ---------- ----------
1 one path 1
2 two path 2
và tất nhiên bạn có thể sử dụng truy vấn này để mở con trỏ trong hàm thứ ba sẽ trả về SYS_REFCURSOR với cột đường dẫn bổ sung.