sql >> Database >  >> RDS >> PostgreSQL

Postgres-functie Einde lus en retourfout

Gebruik OUT parameters om een ​​enkele rij met meerdere kolommen te retourneren. De RETURN type is in dit geval optioneel, ik citeer de handleiding hier :

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;

Bel:

SELECT * FROM conta_relatos(1,2);

Ik heb je functie ook grotendeels vereenvoudigd. Onder andere:

  • Gebruik "Simple CASE" voor je opdrachten.
  • Vereenvoudig twee zoekopdrachten in één met een join.

De hele functie kan gemakkelijk worden herschreven als een enkele SQL-instructie.



  1. twee linker buitenste join werkt niet Oracle sql

  2. apostrof tijdens Insert (Mysql)

  3. wachtwoordverificatie mislukt voor gebruiker ebroot elastische bonenstaak

  4. Hoe kan ik mysqli voorbereide statements in PHP abstraheren?