una tutorial sintaxis procedimientos para hacer funciones funcion español ejercicios cursores como almacenados postgresql scope plpgsql postgresql-9.5

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.