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
като цяло не е необходимо. Обикновено свързаният тип ред на таблица е наличен като тип със същото име.
И не цитирайте името на езика.
И не можете просто да имате самостоятелни извиквания на функции в plpgsql . Използване на присвояване вместо това.
Също така не е добра идея да използвате CaMeL-case идентификатори в Postgres. Използвайте законни идентификатори с малки букви, за да улесните живота си.
Най-доброто за последно :Това може да бъде много по-просто с агрегатната функция 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;