如何在 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 不支持嵌套函数。模拟没有任何意义,它是非生产性的。