Pas besoin de SYS_CONTEXT ou de définitions de curseur. Vous avez besoin d'un type pour que, lorsque le SQL est analysé, il puisse déterminer quelles colonnes vont être renvoyées. Cela dit, vous pouvez facilement écrire un script qui générera des définitions de type et de type de collection pour une ou plusieurs tables basées sur les données dans user_tab_columns.
Le plus proche est
create table my_table
(prodid number, a varchar2(1), b varchar2(1),
c varchar2(1), d varchar2(1), e varchar2(1));
create type my_tab_type is object
(prodid number, a varchar2(1), b varchar2(1),
c varchar2(1), d varchar2(1), e varchar2(1))
.
/
create type my_tab_type_coll is table of my_tab_type;
/
create or replace function get_some_data (p_val in number)
return my_tab_type_coll pipelined is
begin
FOR i in (select * from my_table where prodid=p_val) loop
pipe row(my_tab_type(i.prodid,i.a,i.b,i.c,i.d,i.e));
end loop;
return;
end;
/
SELECT * FROM table(get_Some_Data(3));