PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Краен цикъл на функцията на Postgres и връщане на грешка

Използвайте OUT параметри за да върне един ред с множество колони. RETURN type не е задължителен в този случай, цитирам ръководството тук :

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;

Обаждане:

SELECT * FROM conta_relatos(1,2);

Също така до голяма степен опростих вашата функция. Между другото:

  • Използвайте "Simple CASE" за вашите задачи.
  • Опростете две заявки в една с обединяване.

Цялата функция може лесно да бъде пренаписана като единичен 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. Водещи заплахи за сигурността на PostgreSQL

  2. rails 3.2.2 (или 3.2.1) + Postgresql 9.1.3 + Ubuntu 11.10 Грешка при свързване

  3. Как да стартирам тестове в django, използвайки база данни с данни?

  4. Как да актуализирате групово последователност ID postgreSQL за всички таблици

  5. pgmemcache срещу безкраен кеш