Uložená procedura vs funkce
Uložené procedury a funkce jsou dva typy programovacích bloků. Oba musí mít volající jména. Tato volající jména se používají k jejich volání uvnitř jiného programovacího bloku, jako jsou funkce procedur a balíčky nebo dotazy SQL. Oba tyto typy objektů přijímají parametry a provádějí úlohu za těmito objekty. Toto je syntaxe (v ORACLE) pro vytvoření uložené procedury, vytvořit nebo nahradit proceduru název procedury (parametry)
as
begin
statements;
výjimka
exception_handling
end;
A zde je syntaxe pro vytvoření funkce (v ORACLE), vytvořit nebo nahradit funkci název_funkce (parametry)
return return_datatype
as
begin
statements;
return return_value/variable;
exception;
exception_handling;
end;
Uložené procedury
Jak bylo uvedeno výše, uložené procedury se nazývají programovací bloky. Přijímají parametry jako uživatelský vstup a zpracovávají podle logiky procedury a poskytují výsledek (nebo provádějí konkrétní akci). Tyto parametry mohou být typu IN, OUT a INOUT. Deklarace proměnných, přiřazení proměnných, řídicí příkazy, smyčky, dotazy SQL a další volání funkcí/postupů/balíčků mohou být uvnitř těla procedur.
Funkce
Funkce se také nazývají programovací bloky, které musí vrátit hodnotu pomocí příkazu RETURN, a než vrátí hodnotu, jeho tělo také provede nějaké akce (podle dané logiky). Funkce také přijímají parametry ke spuštění. Funkce lze volat uvnitř dotazů. Když je funkce volána uvnitř dotazu SELECT, vztahuje se na každý řádek sady výsledků dotazu SELECT. Existuje několik kategorií funkcí ORACLE. Jsou,
Funkce jednoho řádku (vrátí jeden výsledek pro každý řádek dotazu)
Existují podkategorie funkcí jednoho řádku.
- Číselná funkce (např.: ABS, SIN, COS)
- Funkce znaků (Příklad: CONCAT, INITCAP)
- Funkce datum a čas (např.: LAST_DAY, NEXT_DAY)
- Konverzní funkce (Příklad: TO_CHAR, TO_DATE)
- Funkce sběru (např.: CARDINALITY, SET)
- Agregační funkce (Vrátí jeden řádek na základě skupiny řádků. Příklad: AVG, SUM, MAX)
- Analytické funkce
- Funkce reference objektu
- Funkce modelu
- Uživatelem definované funkce
Jaký je rozdíl mezi funkcí a uloženou procedurou?
• Všechny funkce musí vrátit hodnotu pomocí příkazu RETURN. Uložené procedury nevracejí hodnoty pomocí příkazu RETURN. Příkaz RETURN uvnitř procedury vrátí její řízení volajícímu programu. Parametry OUT lze použít k vrácení hodnot z uložených procedur.
• Funkce lze volat uvnitř dotazů, ale uložené procedury nelze v dotazech použít.
• Datový typ RETURN musí být zahrnut pro vytvoření funkce, ale v uložené proceduře DDL tomu tak není.