Přeskočit na obsah

Uživatelem definovaná funkce

Z Wikipedie, otevřené encyklopedie

Uživatelsky definovaná funkce, taktéž UDF (z anglického User-Defined Function), představuje funkci, kterou definuje sám uživatel programu nebo prostředí.

Programovací jazyky

[editovat | editovat zdroj]

Uživatelsky definované funkce se zpravidla používají při strukturovaném programování, kdy se při řešení úloh krom vestavěných funkcí používají i funkce uživatelsky definované. Použití shodné uživatelsky definované funkce je vesměs pomalejší, než použití shodné, vestavěné.

V SQL databázích poskytují uživatelsky definované funkce způsob rozšíření, který může být volán a vyhodnocován přímo v SQL dotazech. SQL standard rozšiřuje mezi skalárními a tabulkovými funkcemi. Skalární funkce vrací pouze jedu hodnotu (nebo NULL) zatímco tabulková funkce vrací tabulku. Tabulka může mít dle charakteru funkce jeden či více sloupců a vracet žádný či více řádků výsledku.

Uživatelsky definované funkce se v SQL deklarují pomocí příkazu CREATE FUNCTION. Například funkce pro výpočet druhé mocniny může vypadat takto:

CREATE FUNCTION dbo.Square(Base FLOAT)
  RETURNS FLOAT
  RETURN (Base * Base)

Takto definovanou funkci lze použít jako výraz v SQL dotazech a to v místech, kde se používá většina vestavěných funkcí včetně SELECT dotazů, kde je funkce vyhodnocována v každém řádku dotazu. Na příklad dotaz z tabulky hodnot

SELECT Value, Square(Value) as Square
  FROM Values

vrátí v jednom sloupci hodnotu a v druhém její druhou mocninu. V těle funkce lze použít konstrukcí jazyka PL/SQL.

Některé databáze (například Firebird) pomocí uživatelských funkcí zpřístupňují externí knihovny, napsané v běžných programovacích jazycích. V takovém případě vypadá deklarace následovně (příklad definice funkce ltrim z externí knihovny IB_UDF dodávané společně se serverem):

declare external function ltrim
  cstring(255) null
  returns cstring(255) free_it
  entry_point 'IB_UDF_ltrim' module_name 'ib_udf';

Takto definovaná funkce je zpravidla rychlejší, než uložená procedura se stejnou funkcionalitou.

Související články

[editovat | editovat zdroj]