如何在 PL/pgSQL 中创建嵌套函数?
How do I create a nested function in PL/pgSQL?
我想在 PL/pgSQL 中创建一个函数,其中包含几个嵌套(或内部)函数。这样我就可以把问题分解成更小的部分,但不能让我的小部分在这个函数之外访问。
是否可以在 PL/pgSQL 中执行此操作?如果可以,怎么做?
试一试:
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
编辑:如果你不删除内部
在外部函数末尾的函数,它将对数据库的其余部分保持可见。
PLpgSQL 不支持嵌套函数。模拟没有任何意义,它是非生产性的。
我想在 PL/pgSQL 中创建一个函数,其中包含几个嵌套(或内部)函数。这样我就可以把问题分解成更小的部分,但不能让我的小部分在这个函数之外访问。
是否可以在 PL/pgSQL 中执行此操作?如果可以,怎么做?
试一试:
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
编辑:如果你不删除内部 在外部函数末尾的函数,它将对数据库的其余部分保持可见。
PLpgSQL 不支持嵌套函数。模拟没有任何意义,它是非生产性的。