sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan erklærer man et array af rækketype i en PostgreSQL-funktion?

CREATE OR REPLACE FUNCTION for_example()
  RETURNS integer AS
$func$
DECLARE
   r "WEBHOST";
   b "WEBHOST"[];         -- this works
BEGIN
   FOR r IN 
      SELECT * FROM "WEBHOST"
   LOOP
      b := b || r;        -- this, too
   END LOOP;

   RAISE NOTICE '%', b;   -- get feedback
   RETURN 33;
END
$func$  LANGUAGE plpgsql; -- and lose the quotes

%rowtype er generelt ikke nødvendigt. Normalt er den tilknyttede rækketype af en tabel tilgængelig som type med samme navn.

Og gør ikke citer sprognavnet.

Og du kan ikke bare have selvstændige funktionskald i plpgsql . Bruger en opgave i stedet.

Det er heller ikke en god idé at bruge CaMeL-case-identifikatorer i Postgres. Brug lovlige identifikatorer med små bogstaver for at gøre dit liv lettere.

Det bedste til sidst :Dette kan være meget enklere med den samlede funktion array_agg() :

CREATE OR REPLACE FUNCTION for_example()
  RETURNS integer AS
$func$
DECLARE
   b "WEBHOST"[];
BEGIN
   SELECT array_agg(tbl) INTO b FROM "WEBHOST" tbl;       

   RAISE NOTICE '%', b;
   RETURN 33;
END
$func$  LANGUAGE plpgsql;



  1. Hvordan rettes dårligt formateret JSON i PHP?

  2. Sagsudsagn med where condition i SQL

  3. Hvad kræver dette JavaScript?

  4. Postgres-forespørgsler i produktionen resulterer i unormalt høj disklæsnings-I/O