tutorial - procedimientos almacenados en postgresql pdf
¿Cómo creo una función anidada en PL/pgSQL? (2)
Me gustaría crear una función en PL / pgSQL con un par de funciones anidadas (o internas) dentro de ella. De esta forma puedo dividir el problema en pedazos más pequeños pero no tener mis piezas más pequeñas accesibles fuera de esta función.
¿Es posible hacer esto en PL / pgSQL? ¿Si es así, cómo?
Intentalo:
CREATE OR REPLACE FUNCTION outer() RETURNS void AS $outer$
DECLARE s text;
BEGIN
CREATE OR REPLACE FUNCTION inner() RETURNS text AS $inner$
BEGIN
RETURN ''inner'';
END;
$inner$ language plpgsql;
SELECT inner() INTO s;
RAISE NOTICE ''%'', s;
DROP FUNCTION inner();
END;
$outer$ language plpgsql;
En postgres 9.5 SELECT outer();
salidas
psql:/vagrant/f.sql:14: NOTICE: inner
EDITAR: si no descarta la función interna al final de la función externa, permanecerá visible para el resto de la base de datos.
Las funciones anidadas no son compatibles con PLpgSQL. La emulación no tiene ningún sentido y no es productiva.