Sử dụng OUT
tham số
để trả về một hàng có nhiều cột. RETURN
loại là tùy chọn trong trường hợp này, tôi trích dẫn hướng dẫn sử dụng tại đây :
CREATE OR REPLACE FUNCTION conta_relatos(
_fator_normativo integer
,_fator_determinativo integer
,OUT rel_pri integer
,OUT rel_sec integer
,OUT rel_ref integer
) AS
$func$
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
JOIN "Fontes" f ON f."ID" = v."Item"
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;
-- No RETURN needed, OUT parameters are returned automatically.
END
$func$ LANGUAGE plpgsql;
Gọi:
SELECT * FROM conta_relatos(1,2);
Tôi cũng đã đơn giản hóa phần lớn chức năng của bạn. Trong số những người khác:
- Sử dụng "Trường hợp Đơn giản" cho bài tập của bạn.
- Đơn giản hóa hai truy vấn thành một truy vấn bằng cách kết hợp.
Toàn bộ hàm có thể dễ dàng được viết lại dưới dạng một câu lệnh SQL duy nhất.