Gre*_*ius 6 postgresql scope plpgsql postgresql-9.5
我想在PL/pgSQL中创建一个函数,其中包含几个嵌套(或内部)函数.通过这种方式,我可以将问题分解成更小的部分,但不能在此功能之外访问我的小部件.
是否可以在PL/pgSQL中执行此操作?如果是这样,怎么样?
Pav*_*ule 11
PLpgSQL 不支持嵌套函数。仿真没有任何意义,而且没有生产力(可能会对性能产生负面影响)。
试试吧:
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;
Run Code Online (Sandbox Code Playgroud)
在postgres 9.5 SELECT outer();
输出
psql:/vagrant/f.sql:14: NOTICE: inner
Run Code Online (Sandbox Code Playgroud)
编辑:如果你不删除外部函数末尾的内部函数,它将对数据库的其余部分保持可见.