sql >> Database >  >> RDS >> PostgreSQL

Hoe maak ik een geneste functie in PL/pgSQL?

Probeer het:

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(); uitgangen

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

EDIT:als u de innerfunctie niet aan het einde van de buitenste functie laat vallen, blijft deze zichtbaar voor de rest van de database.



  1. kopieer alle rijen van een tabel naar een andere tabel

  2. Hoe vermeld je de primaire sleutel van een SQL Server-tabel?

  3. MySQL - specifieke kolommen op join?

  4. Hoe maak ik een veilige query voor het uitvoeren van een bulkinvoeging in MySQL met MySQLCommand in C# zonder een opgeslagen proces te gebruiken?