Jos proseduuria suoritettaessa sattuu virhe, johon ohjelmassa ei ole varauduttu tuottaa web server virheilmoituksen 'Request failed ...'. Tämä ilmoitus ei kerro mitään virheen laadusta. Laajempaa virhetietoa on kuitenkin saatavissa. Tieto sattuneesta virheistä löytyy muuttujista sqlcode (virhekoodi) ja sqlerrm (ilmoitusteksti). Nämä muuttujat ovat käytettävissä proseduurin exeption -osassa. Liitä siis proseduurisi loppuun ennen END:iä vaikkapa seuraava koodipätkä, missä pnimi on proseduurisi nimi:exception when others then htp.p('<h3>Proseduurin pnimi suoritus päättyi virheeseen:</h3>'); htp.p('<font color=red>'|| sqlerrm || '</font>');Virheen mahdollisia syitä löydät Oraclen virheilmoitus-manuaalista.
Oracle PL/SQL mahdollistaa taulukkomuotoisten parametrien käyttön www-sivulta käynnistettävässä proseduurissa. Manuaalin mukaan taulukon arvojen pitäisi olla kutsuttaessa yhdessä. Käytännössä näin ei kuitenkaan tarvitse olla. Tämä mahdollistaa taulukkomalliset syöttö- tai ylläpitolomakkeet siten, että kukin taulukon sarake välitetään omana taulukkoparametrina ja indeksi sitoo kokonaisuuden (siis taulukon rivin) yhteen.Taulukkomallinen lomake onnistuu kuitenkin suoraviivaisesti vain tekstikenttiä käyttämällä, sillä näistä lähetetään aina jokin arvo. Jos tekstikenttään ei ole kirjoitettu mitään, saa proseduuri parametri arvon 'null' ko. riviltä. Valintaruuduista lähetetään parametri vain jos ruutu on valittu. Jos yhtään vaihtoehtoa ei valita tai samannimisiä parametreja valitaan samalta rivillä useita, ei indeksi enää kytkekään rivin alkioita yhteen. Taulukon riveille ei ole syytä laittaa sekä tekstikenttiä että valintanappeja. Lomakkeen text-kenttä tuottaa aina parametriarvon, joka tyhjän kentän tapauksessa on kutsuttavan proseduurin kannalta null. Valintanapeista ei tuoteta parametria elleivät ne ole valittuina.
Esimerkiksi lomakkeen:
<Form method="get" action="http://kontti.helsinki.fi:8889/ttst/owa/info1.oph"> Anna hakuehto: br> < input type="text" name="onimi" size=20> < input type="text" name="enimi" size=20><br> < input type="text" name="onimi" size=20> < input type="text" name="enimi" size=20><br> < input type="text" name="onimi" size=20> < input type="text" name="enimi" size=20><br> < input type="text" name="onimi" size=20> < input type="text" name="enimi" size=20><br> < input type="submit" value="HAE" > </form >voisi käsitellä seuraava proseduuri, joka tulostaa annettujen parametrien arvot riveittäin ja tyhjän parametrin tilalle merkin '*':create or replace procedure oph (onimi in owa_util.ident_arr, enimi in owa_util.ident_arr) is c integer; begin htp.htmlOpen; htp.headOpen; htp.title('Testilomake INFOht s97'); htp.headClose; htp.bodyOpen(NULL,'BGCOLOR=silver'); htp.header(1,'testi'); htp.blockquoteOpen; for c in onimi.FIRST .. onimi.LAST loop htp.p(nvl(onimi(c),'*')||nvl(enimi(c),'*')); htp.p('<br>'); end loop; end; / show errors; exit;Jos lomakkeen jättää tyhjäksi saa tulokseksi** ** ** **Kun kahdella ensimmäisellä rivillä antaa A, B , C, D tulee tulokseksi:AB CD ** **Kun antaa A, B ensimmäisellä rivillä ja C,D kolmannella tulee tulokseksi:AB ** CD **Sari A. Laakson esimerkki taulukkomuotoisen lomakkeen käytöstä
HTML-sivuja tuottavaa proseduuria voi testata myös suoraan serverissä SQL- ympäristössä. Jos proseduurissa on silmukoita tällainen testaus on erittäin suositeltavaa, koska tällöin käyttäjä itse pystyy keskeyttämään päättymättömään silmukkaan jääneen prosessinsa. Tällaisessa testauksessa saa myös enemmän virheilmoitustietoa kuin www:n kautta proseduuria ajettaessa.Seuraavassa on sql-komentotiedosto testaa.sql, jolla voi testata mitä tahansa proseduuria. Proseduurin kutsu annetaan komennolle parametrina.
testaa.sql: set serveroutput on spool testitulos.lis execute &1 execute owa_util.showpage spool off exitOletetaan, että halutaan testata proseduuria p1(a char, b number). Komentoa testaa voisi tällöin käyttää esim seuraavasti:
sqlplus / @testaa p1('Kalle',50)Kaikki testauksen aikana tehtävä tulostus tulee sekä näytölle että tallentuu tiedostoon testitulos.lis. Jos testausprosessi ei pääty, voit avata uuden ikkunan konttiin ja tutkia unixin ps-komennolla, mitä sqlplus-ajoja sinulla on käynnissä, ja tarvittaessa keskeyttää prosessin kill-komennolla. Jos haluat tulokset jonnekin muualle kuin tiedostoon testitulos.lis, voit vaikkapa korvata 'spool testitulos.lis' -lauseen lauseella 'spool &2', jolloin voit antaa tiedoston nimen komennon toisena parametrina, esim. 'sqlplus / @testaa p1('Kalle',50) p1_testi.lis'.
Lomakkeen kenttiin kirjoitetun tekstin voi kätevästi tarkastaa JavaSciptiä käyttäen myös työasemassa. Tällöin palvelimessa tarvittava ohjelmakoodi tulee yksinkertaisemmaksi, koska osa tiedon tarkistuksista voidaan jättää pois.
IHT2-pakkaus tulee sisältämään proseduurit, jotka generoivat tarvittavat JavaScript-koodit ja mahdollistavat niiden liittämisen kenttämäärityksiin.
SQL:ssä &-merkki on varattu merkki, joka osoittaa kääntäjälle korvattavan parametriarvon. HTML:ssä tätä merkkiä käytetään eräiden erikoismerkkien esityksessä. Esimerkiksi 'pienempi kuin' esitetään merkkijonona '<', samoin tyhjämerkki saadaan aikaan merkinnällä ' '. Edelleen &:-merkkiä käytetään HTML-linkeissä parametrien erottimena.&-merkin voi upottaa tulostettavaan merkkijonoon kuten minkä tahansa merkin mikäli parametrin aloitustulkinta estetään kääntäjäasetuksilla. Tämä onnistuu sijoittamalla skriptiin ennen proseduurin alkua asetuskomento set define off. Proseduurin perään on syytä laittaa vastaava palautuskomento set define on.
Jos &:-merkki on merkkijonon viimeinen merkki, siihen ei sovelleta parametrin aloitustulkintaa, esim. htp.p('&'||'nbsp;'); onnistuu vaikka parametritulkintaa ei olisi estetty.
Hipsu (') aloittaa ja lopettaa SQL:ssä merkkijonon. Sen saa upotettua tulostettavaan merkkijonoon esittämällä se kahdennettuna, esim. htp.p('it''s') tuottaa merkkijonon it's.