Oracle 12c / Uživatelsky definovaná funkce v klauzuli WITH

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ář

Vaše emailová adresa nebude zobrazena. Povinná pole jsou označena *