[ GORSHTAK @ 10.12.2010. 23:19 ] @
Treba da neke obrađene podatke iz promenljivih prosledim kroz ref cursor web aplikaciji, a ne znam na koji način...

Valjda će kod da bude jasniji oko toga šta mi je cilj

Code:

procedure get_all_data(p_p1 in varchar2, p_rc OUT SYS_REFCURSOR) is
   l_dat1 number := 2;
   l_dat2 varchar2(10);
   l_dat3 varchar2(40);
begin
  for l_indx in 1..5 loop
     l_dat1 := l_dat1 + l_indx;
     if ( mod(l_dat1,2)=0) then
       l_dat2 := ' PARAN ';
     else
       l_dat2 := 'NEPARAN';
     end if;
     l_dat3 := 'Broj ' || l_dat1 || ' je ' || trim(l_dat2); 
     --  Ovde treba proslediti dat 1 2 i 3 u kursor
  end loop;
end;


Tj. da na kraju u kursoru dobijem sledeće
Code:

   3 | NEPARAN | Broj 3 je NEPARAN
   5 | NEPARAN | Broj 5 je NEPARAN
   8 |  PARAN  | Broj 8 je PARAN
  12 |  PARAN  | Broj 12 je PARAN
  17 | NEPARAN | Broj 17 je NEPARAN


Kreirao sam sledeće tipove u slučaju da mogu da pomognu
Code:

CREATE OR REPLACE type num_obj as object (
  t_number number ,
  t_type varchar2(10) ,
  t_desc varchar2(40)
); 
CREATE OR REPLACE type num_table as table of num_obj; 


Kako ovo da rešim, jel izvodljivo?
[ djoka_l @ 10.12.2010. 23:44 ] @
Pogledaj primere za PIPELINED funkcije u Oracle dokumentaciji.
[ GORSHTAK @ 14.12.2010. 20:57 ] @
Code:
CREATE OR REPLACE type num_obj as object (
  t_number number ,
  t_type varchar2(10) ,
  t_desc varchar2(40)
); 
CREATE OR REPLACE type num_table as table of num_obj; 


Verzija sa pipelined:
Code:
procedure get_all_data(p_p1 in varchar2)  return num_table PIPELINED is
   l_dat1 number := 2;
   l_dat2 varchar2(10);
   l_dat3 varchar2(40);
begin
  for l_indx in 1..5 loop
     l_dat1 := l_dat1 + l_indx;
     if ( mod(l_dat1,2)=0) then
       l_dat2 := ' PARAN ';
     else
       l_dat2 := 'NEPARAN';
     end if;
     l_dat3 := 'Broj ' || l_dat1 || ' je ' || trim(l_dat2); 
     pipe row (num_obj(l_dat1, l_dat2, l_dat3) );
  end loop;
end;

Izvršava se sa:
Code:
select * from table(get_all_data(''));



I ono šta sam tražio:
Code:
procedure get_all_data(p_p1 in varchar2, p_rc OUT SYS_REFCURSOR)  is
   l_dat1 number := 2;
   l_dat2 varchar2(10);
   l_dat3 varchar2(40);
   lo_num_obj num_obj;
   lt_num_table num_table := new num_table();
begin
  for l_indx in 1..5 loop
     l_dat1 := l_dat1 + l_indx;
     if ( mod(l_dat1,2)=0) then
       l_dat2 := ' PARAN ';
     else
       l_dat2 := 'NEPARAN';
     end if;
     l_dat3 := 'Broj ' || l_dat1 || ' je ' || trim(l_dat2); 
     lo_num_obj := num_obj (l_dat1, l_dat2, l_dat3);
     lt_num_table.extend;
     lt_num_table(lt_num_table.last) := lo_num_obj;
  end loop;
  open p_rc for select * from table(lt_num_table);
end;

Izvršava se sa:
Code:
SQL> variable rc refcursor
SQL> execute get_all_data( '', :rc );
PL/SQL procedure successfully completed.
SQL> print :rc