Je suis un peu nouveau pour PL/SQL et besoin de quelque chose qui ressemble un peu à ceci:Comment déclarer le paramètre du curseur de référence à une méthode d'objet?
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);
Fondamentalement, je besoin d'une seule routine générique qui sait comment effectuer une table déléguer une action indépendante de table tâches spécifiques à une classe dérivée.
Les méthodes d'objet ci-dessus prenant 'ref cursor' ne compilent pas - le compilateur dit 'le curseur doit être défini'. Donc, bien sûr, j'ai essayé 'type generic_cursor comme ref cursor' partout mais je ne peux pas le compiler.
J'ai trouvé à peu près rien lorsque vous essayez de suivre la syntaxe pour passer des curseurs ref à des méthodes objet. Et cela m'a fait penser que j'essayais peut-être de faire quelque chose de stupide.
Est-ce que ce que j'essaie de faire est sensé? Si oui, qu'est-ce qui me manque? Où puis-je définir generic_cursor pour pouvoir l'utiliser comme type de paramètre de méthode d'objet?
Ce sys_refcursor l'a fait, merci! Je vois maintenant dans le chapitre 11 (!) Ils expliquent que vous pouvez l'utiliser au lieu de devoir d'abord créer un type de curseur ref. J'ai toujours l'impression d'abuser du langage pour le faire ressembler à n'importe quel autre langage OO et de ne pas écrire du code ... A bientôt. :) Merci encore pour votre aide. –