Oracle 12c / User-defined function in the WITH clause
The option to define a PL/SQL function or procedure inside an SQL query might seem strange at first glance, but it has one significant advantage – the database does not need to switch context, which in certain cases leads to a massive increase in performance.
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 /
The same (if not better) result, while maintaining clarity, can also be achieved by using the PRAGMA UDF
directive when declaring the method at the object or package level.
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 ;