sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur skapar jag en kapslad funktion i PL/pgSQL?

Prova det:

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;

I postgres 9.5 SELECT outer(); utgångar

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

EDIT:om du inte släpper den inre funktionen i slutet av den yttre funktionen kommer den att förbli synlig för resten av databasen.



  1. Generera rapport från URL - SQL Server Reporting Services 2008

  2. Hur får man automatiska meddelanden om ändringar i tabeller?

  3. Mysql insert fungerar inte och ger inga fel

  4. Varför har inte self.object i en CreateView ett id efter att ha sparats i databasen?