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
är i allmänhet inte nödvändigt. Normalt är den associerade radtypen för en tabell tillgänglig som typ med samma namn.
Och gör inte citera språknamnet.
Och du kan inte bara ha fristående funktionsanrop i plpgsql . Använder en uppgift istället.
Det är inte heller en bra idé att använda CaMeL-case-identifierare i Postgres. Använd lagliga identifierare med små bokstäver för att göra ditt liv enklare.
Det bästa till sist :Detta kan vara mycket enklare med aggregatfunktionen 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;