Nếu GetQuestions
là một hàm trả về một con trỏ chuột, dường như là những gì bạn có trong phiên bản SQL Server, sau đó bạn có thể thực hiện điều gì đó như sau:
select * from table(MyPackage.GetQuestions('OMG Ponies'));
Hoặc nếu bạn cần nó trong một khối PL / SQL thì bạn có thể sử dụng cùng một lựa chọn trong con trỏ.
Bạn cũng có thể có hàm tạo ra dbms_output
thay vào đó, các câu lệnh để chúng luôn có sẵn để gỡ lỗi, mặc dù điều đó làm tăng thêm một chút chi phí.
Chỉnh sửa
Rất tiếc, không chắc có thể cast()
con trỏ trả về cho một kiểu có thể sử dụng được, trừ khi bạn sẵn sàng khai báo kiểu của riêng mình (và một bảng thuộc kiểu đó) bên ngoài gói. Tuy nhiên, bạn có thể làm điều này, chỉ để kết xuất kết quả:
create package mypackage as
function getquestions(user in varchar2) return sys_refcursor;
end mypackage;
/
create package body mypackage as
function getquestions(user in varchar2) return sys_refcursor as
r sys_refcursor;
begin
open r for
/* Whatever your real query is */
select 'Row 1' col1, 'Value 1' col2 from dual
union
select 'Row 2', 'Value 2' from dual
union
select 'Row 3', 'Value 3' from dual;
return r;
end;
end mypackage;
/
var r refcursor;
exec :r := mypackage.getquestions('OMG Ponies');
print r;
Và bạn có thể sử dụng kết quả của cuộc gọi trong một thủ tục hoặc hàm khác; việc truy cập nó bên ngoài PL / SQL có vẻ hơi phức tạp.
Đã chỉnh sửa để thêm: Với cách tiếp cận này, nếu đó là một thủ tục, về cơ bản bạn có thể làm điều tương tự:
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;