我对 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 以便我可以将它用作对象方法参数类型?