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;