Salvestatud protseduur vs funktsioon
Salvestatud protseduurid ja funktsioonid on kahte tüüpi programmeerimisplokke. Mõlemal peab olema kutsuv nimi. Neid kutsuvaid nimesid kasutatakse nende kutsumiseks mõnes teises programmeerimisplokis, nagu protseduuride funktsioonid ja paketid või SQL-päringud. Mõlemad objektitüübid aktsepteerivad parameetreid ja täidavad nende objektide taga olevaid ülesandeid. See on süntaks (ORACLE'is) salvestatud protseduuri loomiseks
loo või asenda protseduuri protseduurinimi (parameetrid)
as
alusta
avaldused;
erand
erandi_käsitlemine
lõpp;
Ja siin on süntaks funktsiooni loomiseks (ORACLE'is), loo või asenda funktsiooni funktsiooni_nimi (parameetrid)
return return_datatype
as
alusta
avaldused;
return return_value/muutuja;
erand;
exception_handling;
lõpp;
Salvestatud protseduurid
Nagu eespool mainitud, nimetatakse salvestatud protseduure programmeerimisplokkideks. Nad aktsepteerivad parameetreid kasutaja sisendiks ja töötlevad vastav alt protseduuri taga olevale loogikale ning annavad tulemuse (või sooritavad konkreetse toimingu). Need parameetrid võivad olla IN, OUT ja INOUT tüüpi. Muutujate deklaratsioonid, muutujate määramised, juhtlaused, tsüklid, SQL-päringud ja muud funktsioonid/protseduuri-/paketikutsed võivad olla protseduuride korpuses.
Funktsioonid
Funktsioone nimetatakse ka programmeerimisplokkideks, mis peavad tagastama väärtuse RETURN-lause abil ja enne väärtuse tagastamist sooritab ka selle keha teatud toimingud (vastav alt etteantud loogikale). Funktsioonid aktsepteerivad käivitamiseks ka parameetreid. Funktsioone saab kutsuda päringu sees. Kui funktsiooni kutsutakse SELECT päringu sees, rakendub see SELECT päringu tulemuskomplekti igale reale. ORACLE'i funktsioone on mitu kategooriat. Need on
Üherea funktsioonid (tagastab päringu iga rea kohta ühe tulemuse)
Üherea funktsioonidel on alamkategooriad.
- Numbriline funktsioon (nt: ABS, SIN, COS)
- Tähemärgi funktsioon (nt: CONCAT, INITCAP)
- Kuupäeva ja kellaaja funktsioon (nt: LAST_DAY, NEXT_DAY)
- Teisendusfunktsioonid (nt: TO_CHAR, TO_DATE)
- Kogumisfunktsioon (nt: KARDINALSUS, SET)
- Koondfunktsioonid (Tagastab ühe rea, mis põhineb ridade rühmal. Nt: AVG, SUM, MAX)
- Analüütilised funktsioonid
- Objekti viitefunktsioonid
- Mudeli funktsioonid
- Kasutaja määratletud funktsioonid
Mis vahe on funktsioonil ja salvestatud protseduuril?
• Kõik funktsioonid peavad tagastama väärtuse RETURN-lause abil. Salvestatud protseduurid ei tagasta RETURN-lause abil väärtusi. RETURN-lause protseduuri sees tagastab selle juhtimise kutsuvale programmile. OUT parameetreid saab kasutada väärtuste tagastamiseks salvestatud protseduuridest.
• Funktsioone saab kutsuda päringu sees, kuid päringute sees ei saa kasutada salvestatud protseduure.
• Funktsiooni loomiseks tuleb lisada andmetüüp RETURN, kuid salvestatud protseduuris DDL seda ei ole.