PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment déclarer un tableau de rowtype dans une fonction PostgreSQL ?

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 n'est généralement pas nécessaire. Normalement, le type de ligne associé à une table est disponible en tant que type du même nom.

Et ne faites pas citez le nom de la langue.

Et vous ne pouvez pas simplement avoir des appels de fonction autonomes dans plpgsql . Utiliser un devoir à la place.

Ce n'est pas non plus une bonne idée d'utiliser des identifiants CaMeL-case dans Postgres. Utilisez des identifiants légaux en minuscules pour vous simplifier la vie.

Le meilleur pour la fin :Cela peut être beaucoup plus simple avec la fonction d'agrégation 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;