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
;

Jeden komentář

  1. Hodně užitečná věc. Vyžaduje ale, aby i klient (např. SQL*Plus) byl také verze 12c, přes klienta nižší verze (např. 11.2.0.3) to neprojde.

Zanechte komentář

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