Lagret prosedyre kontra funksjon
Lagrede prosedyrer og funksjoner er to typer programmeringsblokker. Begge må ha kallenavn. Disse kallenavnene brukes til å kalle dem inne i en annen programmeringsblokk som prosedyrefunksjoner og pakker eller SQL-spørringer. Begge disse objekttypene godtar parametere og utfører oppgaven bak disse objektene. Dette er syntaksen (i ORACLE) for å lage en lagret prosedyre, opprett eller erstatt prosedyrenavn (parametere)
as
begynn
statements;
unntak
exception_handling
end;
Og her er syntaksen for å lage en funksjon (i ORACLE), opprett eller erstatt funksjon funksjonsnavn (parametere)
retur return_datatype
as
begynn
statements;
return return_value/variable;
unntak;
exception_handling;
end;
lagrede prosedyrer
Som nevnt ovenfor kalles lagrede prosedyrer programmeringsblokker. De aksepterer parametere som brukerinndata og prosesser i henhold til logikken bak prosedyren og gir resultatet (eller utfører en spesifikk handling). Disse parameterne kan være IN, OUT og INOUT typene. Variabelerklæringer, variabeltilordninger, kontrollsetninger, løkker, SQL-spørringer og andre funksjoner/prosedyre/pakkekall kan være inne i prosedyrene.
Functions
Funksjoner kalles også programmeringsblokker, som må returnere en verdi ved hjelp av RETURN-setningen, og før den returnerer en verdi, utfører kroppen også noen handlinger (i henhold til den gitte logikken). Funksjoner aksepterer også parametere som skal kjøres. Funksjoner kan kalles inne i spørringene. Når en funksjon kalles inne i en SELECT-spørring, gjelder den for hver rad i resultatsettet til SELECT-spørringen. Det finnes flere kategorier av ORACLE-funksjoner. De er,
Enkeltradsfunksjoner (returnerer ett enkelt resultat for hver rad i søket)
Det er underkategorier av funksjoner med en enkelt rad.
- Numerisk funksjon (eks.: ABS, SIN, COS)
- Tegnfunksjon (eks.: CONCAT, INITCAP)
- Dato-tidsfunksjon (eks.: LAST_DAY, NEXT_DAY)
- Konverteringsfunksjoner (eks.: TO_CHAR, TO_DATE)
- Samlingsfunksjon (eks.: CARDINALITY, SET)
- Aggregerte funksjoner (returnerer en enkelt rad, basert på en gruppe med rader. Eks: AVG, SUM, MAX)
- Analytiske funksjoner
- Objektreferansefunksjoner
- Modellfunksjoner
- Brukerdefinerte funksjoner
Hva er forskjellen mellom funksjon og lagret prosedyre?
• Alle funksjoner må returnere en verdi ved å bruke RETURN-setningen. Lagrede prosedyrer returnerer ikke verdier med RETURN-setning. RETURN-setning i en prosedyre vil returnere kontrollen til det anropende programmet. OUT-parametere kan brukes til å returnere verdier fra lagrede prosedyrer.
• Funksjoner kan kalles inne i spørringene, men lagrede prosedyrer kan ikke brukes inne i spørringene.
• RETURN-datatypen må inkluderes for å lage en funksjon, men i lagret prosedyre DDL er den ikke det.