Tárolt eljárás kontra funkció
A tárolt eljárások és függvények kétféle programozási blokk. Mindkettőnek hívóneve kell lennie. Ezeket a hívó neveket egy másik programozási blokkon belül hívják meg, például eljárások függvények és csomagok vagy SQL lekérdezések. Mindkét objektumtípus elfogad paramétereket, és végrehajtja az objektumok mögötti feladatot. Ez a szintaxis (ORACLE-ban) egy tárolt eljárás létrehozásához, eljárás létrehozása vagy cseréje eljárásnév (paraméterek)
mint
begin
nyilatkozatok;
kivétel
exception_handling
vége;
És itt van a függvény létrehozásának szintaxisa (ORACLE-ben), függvény létrehozása vagy cseréje függvény_neve (paraméterek)
return return_datatype
mint
begin
nyilatkozatok;
return return_value/variable;
kivétel;
exception_handling;
vége;
Tárolt eljárások
Amint fentebb említettük, a tárolt eljárásokat programozási blokkoknak nevezzük. Elfogadják a paramétereket felhasználói bemenetként, és az eljárás mögötti logika szerint feldolgozzák, és megadják az eredményt (vagy végrehajtanak egy adott műveletet). Ezek a paraméterek IN, OUT és INOUT típusúak lehetnek. Változódeklarációk, változó-hozzárendelések, vezérlőutasítások, ciklusok, SQL-lekérdezések és egyéb függvények/eljárás-/csomaghívások lehetnek az eljárások törzsében.
Funkciók
A függvényeket programozási blokknak is nevezzük, amelyeknek RETURN utasítással kell értéket visszaadniuk, és mielőtt értéket adna vissza, a törzse is végrehajt bizonyos műveleteket (az adott logika szerint). A függvények paramétereket is elfogadnak a futtatáshoz. A függvények a lekérdezéseken belül hívhatók meg. Ha egy függvényt egy SELECT lekérdezésben hívunk meg, az a SELECT lekérdezés eredménykészletének minden sorára vonatkozik. Az ORACLE függvényeknek több kategóriája van. Ők:
Egysoros függvények (egyetlen eredményt ad vissza a lekérdezés minden sorához)
Az egysoros függvényeknek vannak alkategóriái.
- Numerikus függvény (pl.: ABS, SIN, COS)
- Karakterfüggvény (pl.: CONCAT, INITCAP)
- Dátum és idő függvény (pl.: LAST_DAY, NEXT_DAY)
- Konverziós függvények (pl.: TO_CHAR, TO_DATE)
- Gyűjtési funkció (pl.: CARDINALITY, SET)
- Aggregált függvények (Egy sort ad vissza, sorok csoportja alapján. Pl.: AVG, SUM, MAX)
- Analitikai függvények
- Objektumreferencia függvények
- Modellfunkciók
- Felhasználó által meghatározott funkciók
Mi a különbség a függvény és a tárolt eljárás között?
• Minden függvénynek értéket kell visszaadnia a RETURN utasítás használatával. A tárolt eljárások nem adnak vissza értékeket a RETURN utasítás használatával. Az eljáráson belüli RETURN utasítás visszaadja a vezérlést a hívó programnak. Az OUT paraméterek használhatók a tárolt eljárások értékeinek visszaadására.
• A függvények meghívhatók a lekérdezéseken belül, de a tárolt eljárások nem használhatók a lekérdezéseken belül.
• A RETURN adattípust szerepeltetni kell egy függvény létrehozásához, de a DDL tárolt eljárásban nem.