create or replace package p_ese2 as
procedure cerca(
	IlNome		in Persone.Nome%TYPE DEFAULT NULL,
	IlCognome	in Persone.Cognome%TYPE DEFAULT NULL,
	LAnnoNascita	in Persone.AnnoNascita%TYPE DEFAULT NULL);

TYPE HTTPCognomiT IS TABLE OF VARCHAR2(15) INDEX BY BINARY_INTEGER;
EmptyHTTPCognomi HTTPCognomiT;

procedure mostra(
	ICognomi  in HTTPCognomiT DEFAULT EmptyHTTPCognomi);

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_ese2;
/

create or replace package body p_ese2 as
procedure warning(
        IlNome    	in Persone.Nome%TYPE DEFAULT NULL,
        IlCognome 	in Persone.Cognome%TYPE DEFAULT NULL,
	LAnnoNascita	in Persone.AnnoNascita%TYPE DEFAULT NULL,
	IlMessaggio VarChar2)
is
begin
   htp.htmlOpen;
   htp.headOpen;
   htp.title('Warning');
   htp.headClose;

   htp.bodyOpen; 
   htp.print('<H1 ALIGN=CENTER> Persona ' || IlNome || ' ' || IlCognome ||' '|| IlMessaggio ||'</H1>');
   htp.br;
   htp.formOpen('http://oracle1.cli.di.unipi.it/webdb/ghelli03.p_ese2.immettiParametri');
   htp.formHidden('IlNome',IlNome);
   htp.formHidden('IlCognome',IlCognome); 
   htp.formHidden('LAnnoNascita',LAnnoNascita); 
   htp.formSubmit('','Reinserisci Persona');
   htp.formClose;
   htp.print('<CENTER>');
   htp.anchor('http://www.cli.di.unipi.it/~ghelli03/menu.html','Menu Principale'); 
   htp.print('</CENTER>'); 
   htp.bodyClose;
   htp.htmlClose;
end warning;

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>Immetti i parametri che ti interessano</H1>');
   htp.br;
   htp.br;  
   htp.formOpen('http://oracle1.cli.di.unipi.it/webdb/ghelli03.p_ese2.cerca','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.formSubmit(cvalue => 'Cerca');
   htp.formClose;
   htp.bodyClose; 
   htp.htmlClose; 
end immettiParametri; 

procedure cerca(
	IlNome		in Persone.Nome%TYPE DEFAULT NULL,
	IlCognome	in Persone.Cognome%TYPE DEFAULT NULL,
	LAnnoNascita	in Persone.AnnoNascita%TYPE DEFAULT NULL)
is
laPersona Persone%ROWTYPE;
begin
  modGUI.ApriFinestra('Risultati Ricerca','Risultati Ricerca');
  modGUI.ApriForma('ghelli03.p_ese2.mostra');
  modGUI.ApriTabella;

  for laPersona in
    (select *
     from   persone
     where  ((IlNome is null) Or (upper(rtrim(Nome))) like upper(rtrim(IlNome)))
             And ((IlCognome is null) Or (upper(rtrim(Cognome))) like upper(rtrim(IlCognome)))
             And ((LAnnoNascita is null) Or (LAnnoNascita = AnnoNascita)))
  loop
    modGUI.ApriRiga;
    modGUI.ApriCasella;
    modGUI.CheckBox('ICognomi',laPersona.Cognome);
    modGUI.ChiudiCasella;
    modGUI.CasellaDiTesto(laPersona.Nome);
    modGUI.CasellaDiTesto(laPersona.Cognome);
    modGUI.CasellaDiTesto(to_char(laPersona.AnnoNascita));
    modGUI.ChiudiRiga;
  end loop;
  modGUI.ChiudiTabella;
  modGUI.BottoneOK('','Ho Scelto!');
  modGUI.ChiudiForma;
  modGUI.ChiudiFinestra;  
end cerca;


procedure mostra(
	ICognomi  in HTTPCognomiT DEFAULT EmptyHTTPCognomi)
is
i number;
laPersona Persone%ROWTYPE;
begin
  modGUI.ApriFinestra('Persone scelte','Persone scelte');
  modGUI.ApriTabella;
  i := ICognomi.first;
  while (i is not null)
  loop
    select * into laPersona
    from Persone
    where rtrim(Cognome) = rtrim(ICognomi(i));

    modGUI.ApriRiga;
    modGUI.CasellaDiTesto(laPersona.Nome);
    modGUI.CasellaDiTesto(laPersona.Cognome);
    modGUI.CasellaDiTesto(to_char(laPersona.AnnoNascita));
    modGUI.ChiudiRiga;
    i := ICognomi.next(i);
  end loop;
  modGUI.ChiudiTabella;
  modGUI.ChiudiFinestra;  
end mostra;


end p_ese2;
/


