create or replace procedure opiskelija_sel (onimi in varchar2) is cursor op is select onumero, nimi, paa_aine, kaupunki, aloitusvuosi from info1.opiskelija where nimi like onimi order by nimi; t varchar2(80); o op%rowtype; jatkuu boolean; begin htp.htmlOpen; htp.headOpen; htp.title('Opiskelijan haku - esimerkkilomake TSOHA 2000'); htp.headClose; htp.bodyOpen(NULL,'BGCOLOR=silver'); htp.header(1,'Opiskelijan haku - esimerkkilomake'); htp.blockquoteOpen; htp.p('Opiskelijan nimi on muodosssa Etunimi Sukunimi.'); htp.p('Hakuehdossa voit käyttää alaviivaa (_) korvaamaan yksittäisen merkin ja'); htp.p('prosenttimerkkiä (%) korvaamaan merkkijonon.'); htp.para; htp.formOpen('info1.opiskelija_sel','POST'); htp.p('Anna hakuehto: '); htp.formText('onimi',40,40,''); htp.p(''); htp.fontOpen(NULL,NULL,-1); htp.italic('Haku kohdistuu esimerkkitietokantaan'); htp.fontClose; htp.formClose; htp.hr; jatkuu:=True; open op; fetch op into o; if op%notfound then htp.bold('Ketään ei löytynyt!'); else htp.header(2,'Seuraavat opiskelijat täyttivät hakuehdon:'); htp.tableOpen(1,'center',NULL,NULL,'width 50%'); htp.tableRowOpen; htp.tableHeader('Nimi'); while jatkuu loop htp.tableRowOpen; htp.tableData(htf.anchor( 'info1.opiskelija_data?onimi='||replace(o.nimi,' ','+'),o.nimi)); fetch op into o; if op%notfound then jatkuu:= false; end if; end loop; htp.tableClose; end if; htp.bodyClose; htp.htmlClose; end; / grant execute on opiskelija_sel to www_user; show errors; exit;