Pokud GetQuestions
je funkce vracející rekurzor, který se zdá být tím, co máte ve verzi pro SQL Server, pak byste mohli být schopni udělat něco takového:
select * from table(MyPackage.GetQuestions('OMG Ponies'));
Nebo pokud jej potřebujete v bloku PL/SQL, můžete použít stejný výběr v kurzoru.
Můžete také nechat funkci vytvořit dbms_output
příkazy, takže jsou vždy k dispozici pro ladění, i když to trochu zvyšuje režii.
Upravit
Hmmm, nejsem si jistý, jestli je možné cast()
vrácený rekurzor na použitelný typ, pokud nejste ochotni deklarovat svůj vlastní typ (a tabulku tohoto typu) mimo balíček. Můžete to však udělat jen pro výpis výsledků:
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;
A výsledek volání můžete použít v jiné proceduře nebo funkci; jen dostat se k tomu mimo PL/SQL se zdá být trochu složité.
Upraveno za účelem přidání: S tímto přístupem, pokud je to postup, můžete udělat v podstatě to samé:
var r refcursor;
exec mypackage.getquestions(:r, 'OMG Ponies');
print r;