これはpipelinedの機能で解決できます。
宣言パッケージと種類
CREATE OR REPLACE PACKAGE mytestpackage AS
TYPE my_record is RECORD(
code varchar2
);
TYPE my_table IS TABLE OF my_record;
function get_results(par1 number,par2 number,par3 number) RETURN my_table PIPELINED;
end mytestpackage;
パッケージ本体
CREATE OR REPLACE PACKAGE BODY as
function get_results(par1 number,par2 number,par3 number) RETURN my_table PIPELINED is
my_rec my_record:=null;
cursor myCursor(myp1 number,myp2 number,myp3 number) is
select code from table1 where P1=myp1 and P2=myp2 and P3=myp3
;
begin
--loop through outputs
FOR item IN myCursor(par1,par2,par3) LOOP
my_rec:=null;
select item.code into my_rec from dual;
PIPE ROW(my_rec);
end loop;
return;
end;
end mytestpackage;
、そして最後に、それは、WHは非常に明確ではありません
SELECT * FROM TABLE(mytestpackage.get_results(5,10,20));
をそれを使用しますあなたは達成しようとしています...なぜ「Wのみが一致しますか」?あなたの質問を明確にし、望ましい出力の例を挙げてください。 – Plirkee
Sも同様に一致しません。WとSはパラメータが一致しているため返されますが、2Wに気がつければ返されるのは – doe
なので、提供したクエリと同様の結果を返します。 'P1 = 5、P2 = 10、P3 = 20'の場合、結果は関数(パッケージ内)から得られるはずですか? – Plirkee