我想在PL / pgSQL中创建一个函数,其中包含几个嵌套(或内部)函数。通过这种方式,我可以将问题分解成更小的部分,但不能在此功能之外访问我的小部件。
是否可以在PL / pgSQL中执行此操作?如果是这样,怎么样?
答案 0 :(得分:8)
试一试:
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;
在postgres 9.5 SELECT outer();
输出
psql:/vagrant/f.sql:14: NOTICE: inner
编辑:如果你不放弃内心
函数在外部函数的末尾,它将对数据库的其余部分保持可见。
答案 1 :(得分:3)
PLpgSQL不支持嵌套函数。仿效没有任何意义,也没有效果。