0
Dans mon esprit, j'écris une fonction telle que l'appel quelque chose commeWrap sélectionner une fonction Oracle
select get_foo() from dual;
ou
select * from table (get_foo);
renvoie le même résultat que
select * from foo;
Donc, j'ai une fonction qui compile ...
create or replace function get_foo return sys_refcursor as
rc_foo sys_refcursor;
begin
open rc_foo for 'select * from foo';
return rc_foo;
end;
mais sélectionnez get_foo() à partir du double renvoie 1 ligne.
((ID=1,NAME=Sarah1),(ID=2,NAME=Sarah2),(ID=3,NAME=Sarah3),)
tandis que select * de la table (get_foo()) me donne ORA-22905. Comment puis-je modifier la définition de la fonction et/ou l'appel pour obtenir le résultat souhaité?
Merci. Ceci est raisonnablement clair. J'essaie toujours de me faire une idée des pipelining et des paquets. Sont-ils nécessaires pour obtenir l'effet désiré? De plus, y a-t-il un impact (significatif) sur la sélection dans un curseur puis sur une boucle –
@SarahPhillips en fonction de la taille de l'ensemble de résultats, vous pouvez améliorer cela en utilisant bulk collect (avec une limite de 100) réduire les récupérations par ligne renvoyée. c'est-à-dire quelque chose comme 'fetch v_rc bulk collect dans t_foo;' où 't_foo' est une table de' r_foo', bouclant ensuite ce tableau de sortie et canalisant la sortie. – DazzaL
@SarahPhillips p.ex. voir modifier pour cela – DazzaL