私はPL/SQLに少し慣れていないので、次のようなものが必要です:
create type base as object (
unused number,
member procedure p( c in ref cursor )
) not final;
create type child1 under base (
overriding member procedure p( c in ref cursor ) as
t table1%rowtype
begin
fetch c into t;
-- process table1 row
end;
);
create type child2 under base (
overriding member procedure p( c in ref cursor ) as
t table2%rowtype
begin
fetch c into t;
-- process table2 row
end;
);
procedure generic_handler( o in base, c in ref cursor ) as
begin
o.p( c );
end;
o1 child1 := child1(0)
o2 child2 := child2(0)
c ref cursor
open c for select * from table1;
generic_handler( o1, c );
open c for select * from table2;
generic_handler( o2, c );
基本的に、テーブル固有のタスクを派生クラスに委譲する、テーブルに依存しないアクションを実行する方法を知っている単一の汎用ルーチンが必要です。
「参照カーソル」を使用する上記のオブジェクト メソッドはコンパイルされません - コンパイラは「カーソルを定義する必要がある」と言います。したがって、もちろん、「type generic_cursor as ref cursor」をあちこちで試しましたが、コンパイルできません。
参照カーソルをオブジェクト メソッドに渡すための構文を追跡しようとしても、ほとんど何も見つかりませんでした。そして、これは私が何かばかげたことをしようとしているのかもしれないと思いました。
私がやろうとしていることは理にかなっていますか?もしそうなら、私は何が欠けていますか? オブジェクト メソッドのパラメーターの型として使用できるように、generic_cursor をどこで定義できますか?