Я немного новичок в 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 );
По сути, мне нужна одна общая процедура, которая знает, как выполнять независимое от таблицы действие, делегируя специфичные для таблицы задачи производному классу.
Вышеуказанные методы объекта, принимающие 'ref курсора, не компилируются - компилятор говорит, что' курсор должен быть определен '. Поэтому, конечно, я попытался повсеместно использовать «тип generic_cursor в качестве курсора ссылки», но не смог его скомпилировать.
Я обнаружил ничего , когда пытался отследить синтаксис для передачи ref-курсоров в объектные методы. И это заставило меня подумать, что, возможно, я пытаюсь сделать что-то глупое.
Имеет ли смысл то, что я пытаюсь сделать? Если так, что я пропускаю? Где я могу определить generic_cursor, чтобы использовать его как тип параметра метода объекта?