PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Funkcja Postgres End Loop i błąd powrotu

Użyj OUT parametry aby zwrócić pojedynczy wiersz z wieloma kolumnami. RETURN typ jest w tym przypadku opcjonalny, cytuję instrukcję tutaj :

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;

Zadzwoń:

SELECT * FROM conta_relatos(1,2);

W dużym stopniu uprościłem też twoją funkcję. Między innymi:

  • Użyj "Prosty przypadek" za swoje zadania.
  • Uprość dwa zapytania w jedno dzięki sprzężeniu.

Całą funkcję można łatwo przepisać jako pojedynczą instrukcję SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pierwsze kroki z Postgresem 13 na Ubuntu 20.04

  2. PostgreSQL przez poddźwiękowy

  3. Jak mieć klucz obcy wskazujący na dwa klucze podstawowe?

  4. Automatyzacja Barmana z Puppet:it2ndq/barman (część druga)

  5. Jak wyświetlić listę wszystkich widoków w bazie danych PostgreSQL