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.