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
;
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.