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
ist im Allgemeinen nicht erforderlich. Normalerweise steht der zugehörige Zeilentyp einer Tabelle als gleichnamiger Typ zur Verfügung.
Und nicht geben Sie den Namen der Sprache an.
Und Sie können nicht einfach eigenständige Funktionsaufrufe in plpgsql haben . Stattdessen eine Zuweisung verwenden.
Es ist auch keine gute Idee, CaMeL-Case-Identifikatoren in Postgres zu verwenden. Verwenden Sie legale Kennungen in Kleinbuchstaben, um Ihr Leben einfacher zu machen.
Das Beste zum Schluss :Dies kann viel einfacher mit der Aggregatfunktion 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;