PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie erstelle ich eine verschachtelte Funktion in PL/pgSQL?

Probieren Sie es aus:

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;

In Postgres 9.5 SELECT outer(); Ausgänge

 psql:/vagrant/f.sql:14: NOTICE:  inner

BEARBEITEN:Wenn Sie die innere Funktion nicht am Ende der äußeren Funktion löschen, bleibt sie für den Rest der Datenbank sichtbar.