Случайно наткнулся на статью про WITH и обнаружил что он поддерживает вставку PL/SQL функций и процедур, да, раньше такого не знал. Эта возможность появилась с версии Oracle 12c.
Пример WITH с функцией
WITH
FUNCTION with_function(p_id IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN p_id;
END;
SELECT with_function(1)
FROM dual
;
Пример WITH с процедурой
WITH
PROCEDURE with_procedure(p_id IN NUMBER) IS
BEGIN
DBMS_OUTPUT.put_line('p_id=' || p_id);
END;
FUNCTION with_function(p_id IN NUMBER) RETURN NUMBER IS
BEGIN
with_procedure(p_id);
RETURN p_id;
END;
SELECT with_function(1)
FROM dual
;
См. пример на dbfiddle.
Ссылки:
[1] Oracle WITH operator
[2] Write Less with More – Part 8 (PL/SQL in the WITH Clause)
[3] WITH Clause Enhancements in Oracle Database 12c Release 1 (12.1)
[4] WITH Clause : Subquery Factoring in Oracle
Комментариев нет:
Отправить комментарий