Oracle 12c / Uživatelsky definovaná funkce v klauzuli WITH
Přes to, že verze 12c databáze Oracle vyšla někdy v polovině roku 2013, stále její použití ve firmách není úplnou samozřejmostí. Některé zajímavé vlastnosti zachycuje série následujících příkladů.

Možnost definovat PL/SQL funkci nebo proceduru uvnitř SQL dotazu může na první pohled vypadat zvláštně, má to ale jednu podstatnou výhodu – databáze nemusí přepínat kontext, což vede v určitých případech k masivnímu nárůstu výkonu.

WITH
  FUNCTION mf_Upper(
        p_Input VARCHAR2
    ) RETURN VARCHAR2
  IS
  BEGIN
    RETURN UPPER(p_Input);
  END;
SELECT mf_Upper('test') as upper_dummy
  FROM dual
/

Stejného (ne-li lepšího) výsledku se zachováním přehlednosti lze dosáhnout i použitím direktivy PRAGMA UDF při deklaraci metody na úrovni objektu či package.

CREATE OR REPLACE FUNCTION mf_Upper(
      p_Input VARCHAR2
  ) RETURN VARCHAR2
IS
  PRAGMA UDF;
BEGIN
  RETURN UPPER(p_Input);
END;
/
SELECT mf_Upper('test') as upper_dummy
  FROM dual
;


ZANECHTE KOMENTÁŘ


Velké díky pro teslathemes