Uložená procedúra verzus funkcia
Uložené procedúry a funkcie sú dva typy programovacích blokov. Obaja musia mať volajúce mená. Tieto volajúce mená sa používajú na ich volanie v rámci iného programovacieho bloku, ako sú funkcie procedúr a balíky alebo dotazy SQL. Oba tieto typy objektov akceptujú parametre a vykonávajú úlohu za týmito objektmi. Toto je syntax (v ORACLE) na vytvorenie uloženej procedúry, vytvoriť alebo nahradiť procedúru názov procedúry (parametre)
as
begin
statements;
výnimka
exception_handling
end;
A tu je syntax na vytvorenie funkcie (v ORACLE), vytvoriť alebo nahradiť funkciu názov_funkcie (parametre)
return return_datatype
as
begin
statements;
return return_value/variable;
exception;
exception_handling;
end;
Uložené procedúry
Ako je uvedené vyššie, uložené procedúry sa nazývajú programovacie bloky. Prijímajú parametre ako vstup používateľa a spracovávajú podľa logiky postupu a poskytujú výsledok (alebo vykonávajú špecifickú akciu). Tieto parametre môžu byť typu IN, OUT a INOUT. Deklarácie premenných, priradenia premenných, riadiace príkazy, cykly, SQL dotazy a ďalšie volania funkcií/postupov/balíkov môžu byť súčasťou tela procedúr.
Funkcie
Funkcie sa nazývajú aj programovacie bloky, ktoré musia vrátiť hodnotu príkazom RETURN a predtým, ako vráti hodnotu, vykoná aj jeho telo nejaké akcie (podľa danej logiky). Funkcie tiež akceptujú parametre na spustenie. V rámci dotazov je možné volať funkcie. Keď je funkcia volaná v rámci dotazu SELECT, vzťahuje sa na každý riadok sady výsledkov dotazu SELECT. Existuje niekoľko kategórií funkcií ORACLE. Sú to
Funkcie s jedným riadkom (vracia jeden výsledok pre každý riadok dopytu)
Existujú podkategórie funkcií s jedným riadkom.
- Numerická funkcia (napr.: ABS, SIN, COS)
- Funkcia znakov (napr.: CONCAT, INITCAP)
- Funkcia dátumu a času (napr.: LAST_DAY, NEXT_DAY)
- Funkcie konverzie (napr. TO_CHAR, TO_DATE)
- Funkcia zberu (napr.: CARDINALITY, SET)
- Agregované funkcie (Vráti jeden riadok na základe skupiny riadkov. Príklad: AVG, SUM, MAX)
- Analytické funkcie
- Funkcie referencie objektu
- Funkcie modelu
- Funkcie definované používateľom
Aký je rozdiel medzi funkciou a uloženou procedúrou?
• Všetky funkcie musia vrátiť hodnotu pomocou príkazu RETURN. Uložené procedúry nevracajú hodnoty pomocou príkazu RETURN. Príkaz RETURN vo vnútri procedúry vráti svoju kontrolu volajúcemu programu. Parametre OUT možno použiť na vrátenie hodnôt z uložených procedúr.
• Funkcie možno volať vo vnútri dotazov, ale uložené procedúry nie je možné použiť vo vnútri dotazov.
• Na vytvorenie funkcie musí byť zahrnutý dátový typ RETURN, ale v uloženej procedúre DDL to tak nie je.