ストアドプロシージャでREF CURSORを渡すには

マニュアルを読まずにネット見ながらコーディングしてたら意外に苦戦。忘れないようにメモ。


type curtype is ref cursor;
procedure foo(cu in curtype) is
row table_name%rowtype;
begin
loop
fetch cu into row;
exit when cu%notfound;
-- any process --
end loop;
end;

declare
cu curtype;
begin
open cu for select ....;
foo(cu);
close cu;
end;

オープンしてから渡さないとだめみたいでした。