Renvoi d'un select par une fonction (via FETCH BULK_COLLECT)
Bonjour à tous,
Je m'excuse d'avance pour la potentielle "newbitude" de mon problème ;) Mon besoin est simple : je souhaiterais construire un select dynamique à partir d'une fonction pl. L'argument de cette fonction serait une chaine de caractères qui représenterait la clause where du select. J'aimerais arriver à qqchose comme ceci :
Code:
select * from table(my_pkg.get_employee_by_where('e_mail like ''%pop%'''));
Voici le bout de code que j'ai implémenté (je passe par un "bête" bulk collect):
Code:
1 2 3 4 5 6 7 8 9 10 11
| function get_employee_by_where(aWhere varchar2) return n_employee is
type myRefCur is ref cursor;
myCur myRefCur;
myNEmp n_employee;
begin
open myCur for 'select objid from table_employee where ' || aWhere;
fetch myCur bulk collect
into myNEmp;
close myCur;
return myNEmp;
end get_employee_by_where; |
table_employee.objid est de type number. Si je crée le type n_employee comme une table de number, tout se déroule correctement : la requête du dessus me renvoie des résultats, jusque là tout va bien !
Code:
create or replace type n_employee as table of number;
Par contre, dès que j'essaie de renvoyer plus d'éléments dans mon tableau avec la création d'un type spécifique (t_employee), le bulk collect me renvoie une erreur "ORA-00932 expected UDT got number".
Code:
1 2
| create or replace type t_employee as object (objid number);
create or replace type n_employee as table of t_employee; |
Et là j'avoue que je sèche... Je n'arrive pas bien à voir la différence entre les deux implémentations.
Je vois qu'il y a plusieurs manières de construire un tableau mais cette méthode me semblait etre la plus facile.
Merci d'avance !
++
Pop
NB : Pour la version Oracle.
Code:
1 2
| select * from v$version where rownum = 1;
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi |