レコード型を返さない方法でこの関数を書き直す必要があります。その理由は、それを使用してビューを作成する必要があるためです。
CREATE OR REPLACE FUNCTION conta_relatos(IN _fator_normativo integer, IN _fator_determinativo integer, OUT rel_pri integer, OUT rel_sec integer, OUT rel_ref integer)
RETURNS record AS
$BODY$
DECLARE
tipo_relato text;
BEGIN
rel_pri := 0;
rel_sec := 0;
rel_ref := 0;
FOR tipo_relato IN
SELECT f."Tipo_Relato"
FROM "Vinculos" v
INNER JOIN ("Fontes" f INNER JOIN "Itens" i ON f."ID" = i."Fonte") ON v."Item" = i."ID"
WHERE v."Fator_Normativo" = _fator_normativo
AND v."Fator_Determinativo" = _fator_determinativo
LOOP
CASE tipo_relato
WHEN '1 - Relato Primário' THEN
rel_pri := rel_pri + 1;
WHEN '2 - Relato Secundário' THEN
rel_sec := rel_sec + 1;
WHEN '3 - Relato Referencial' THEN
rel_ref := rel_ref + 1;
END CASE;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
この関数は、、 の3 つint
の列を返す必要があります。rel_pri
rel_sec
rel_ref