sql >> Database >  >> RDS >> PostgreSQL

Hoe een array van rowtype declareren in een PostgreSQL-functie?

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 is over het algemeen niet nodig. Normaal gesproken is het bijbehorende rijtype van een tabel beschikbaar als type met dezelfde naam.

En doe niet citeer de taalnaam.

En je kunt niet zomaar stand-alone functieaanroepen hebben in plpgsql . In plaats daarvan een opdracht gebruiken.

Het is ook geen goed idee om CaMeL-case-ID's in Postgres te gebruiken. Gebruik legale identificatiecodes in kleine letters om uw leven gemakkelijker te maken.

De het beste voor het laatst :Dit kan veel eenvoudiger zijn met de verzamelfunctie 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. Hoe voeg ik een reeks waarden in verschillende kolommen van een mysql-tabel in?

  2. Kan ik arrays in hstore opslaan met Rails?

  3. Willekeurige fout:#1045 Kan niet inloggen op de MySQL-server

  4. Hoe een parameter in de opgeslagen procedure te negeren als de waarde nul is