sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres Funktion End Loop and Return Error

Brug OUT parametre for at returnere en enkelt række med flere kolonner. RETURN type er valgfri i dette tilfælde, jeg citerer manualen her :

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;

Ring til:

SELECT * FROM conta_relatos(1,2);

Jeg har også stort set forenklet din funktion. Blandt andet:

  • Brug "Simple CASE" til dine opgaver.
  • Forenkle to forespørgsler til én med en joinforbindelse.

Hele funktionen kunne nemt omskrives som en enkelt SQL-sætning.



  1. Hvordan kan jeg forbinde A med B og også B med C på én gang?

  2. 13 blogartikler om bedste praksis og tips til databasedesign

  3. UTC_DATE Eksempler – MySQL

  4. MySQL i skyen - Online migration fra Amazon RDS til din egen server:Del 2