create or replace package p_ese7 as
procedure seleziona(
	IlNome		in Persone.Nome%TYPE DEFAULT NULL,
	IlCognome	in Persone.Cognome%TYPE DEFAULT NULL,
	LAnnoNascita	in Persone.AnnoNascita%TYPE DEFAULT NULL,
        Ordine          in VarChar2 DEFAULT NULL);

procedure immettiParametri(
	IlNome          in Persone.Nome%TYPE DEFAULT NULL,
        IlCognome       in Persone.Cognome%TYPE DEFAULT NULL,
        LAnnoNascita    in Persone.AnnoNascita%TYPE DEFAULT NULL);   

end p_ese7;
/

create or replace package body p_ese7 as

host varchar2(10) := 'oracle1'; /* oracle1 o oracle2 */
user varchar2(10) := 'manghi';  /* nome utente oracle */

procedure immettiParametri(
	IlNome          in Persone.Nome%TYPE DEFAULT NULL,
        IlCognome       in Persone.Cognome%TYPE DEFAULT NULL,
        LAnnoNascita    in Persone.AnnoNascita%TYPE DEFAULT NULL)
is
begin
   htp.htmlOpen;
   htp.headOpen; 
   htp.title('Immissione parametri');
   htp.headClose;

   htp.bodyOpen;
   htp.print('<H1 ALIGN=CENTER>Ricerca persone</H1>');
   htp.br;
   htp.br;  
   htp.formOpen('http://'||host||'.cli.di.unipi.it/pls/webdb/'||user||'.p_ese7.seleziona','GET');
   htp.print('Nome ');
   htp.formText('IlNome','15','15',IlNome);
   htp.br;
   htp.print('Cognome ');
   htp.formText('IlCognome','15','15',IlCognome); 
   htp.br;
   htp.print('Anno di Nascita ');
   htp.formText('LAnnoNascita','2','2',LAnnoNascita); 
   htp.br;
   htp.print('Ordina per ');
   modGUI.RadioButton('Ordine','Nome','Nome'); 
   modGUI.RadioButton('Ordine','Cognome','Cognome');
   modGUI.RadioButton('Ordine','AnnoNascita','Anno di Nascita'); 
   htp.br;

   htp.formSubmit(cvalue => 'Seleziona');
   htp.formClose;
   htp.bodyClose; 
   htp.htmlClose; 
end immettiParametri; 

procedure seleziona(
	IlNome		in Persone.Nome%TYPE DEFAULT NULL,
	IlCognome	in Persone.Cognome%TYPE DEFAULT NULL,
	LAnnoNascita	in Persone.AnnoNascita%TYPE DEFAULT NULL,
        Ordine		in VarChar2 DEFAULT NULL)
is
sqlString VarChar2(500);
laPersona Persone%ROWTYPE;
TYPE EmpCurTyp IS REF CURSOR;
pers EmpCurTyp; /* weakly typed cursor variable: variabile senza tipo di ritorno */
begin
  modGUI.ApriFinestra('Risultati Ricerca','Risultati Ricerca');
  modGUI.ApriForma(user||'.p_ese7.immettiParametri');
  modGUI.ApriTabella;

  sqlString := '
       select * 
       from persone 
       where  (((:1 is null) Or (upper(rtrim(Nome))) like upper(rtrim(:2))) 
          And ((:3 is null) Or (upper(rtrim(Cognome))) like upper(rtrim(:4)))
          And ((:5 is null) Or (AnnoNascita = :6)))';

  if not(Ordine is null) then sqlString := sqlString ||' order by '||Ordine;
  end if;
 
  OPEN pers FOR sqlString
  USING IlNome,IlNome,IlCognome,IlCognome,LAnnoNascita,LAnnoNascita;

  loop
    FETCH pers INTO laPersona; 
    EXIT WHEN pers%NOTFOUND;
    modGUI.ApriRiga;
    modGUI.CasellaDiTesto(laPersona.Nome);
    modGUI.CasellaDiTesto(laPersona.Cognome);
    modGUI.CasellaDiTesto(to_char(laPersona.AnnoNascita));
    modGUI.ChiudiRiga;
  end loop;

  close pers;

  modGUI.ChiudiTabella;
  modGUI.BottoneOK('','OK!');
  modGUI.ChiudiForma;
  modGUI.ChiudiFinestra;  
end seleziona;

end p_ese7;
/

show err package p_ese7;
show err;

