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;