PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Fungsi Postgres End Loop dan kembalikan Kesalahan

Gunakan OUT parameter untuk mengembalikan satu baris dengan beberapa kolom. RETURN type opsional dalam hal ini, saya mengutip manual di sini :

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;

Telepon:

SELECT * FROM conta_relatos(1,2);

Saya juga sangat menyederhanakan fungsi Anda. Antara lain:

  • Gunakan "Simple CASE" untuk tugas Anda.
  • Sederhanakan dua kueri menjadi satu dengan bergabung.

Seluruh fungsi dapat dengan mudah ditulis ulang sebagai satu pernyataan 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. Perbedaan kinerja besar Postgresql saat menggunakan IN vs NOT IN

  2. Apa yang harus diindeks pada kueri dengan banyak kolom dalam klausa WHERE

  3. Mengaktifkan dukungan PostgreSQL di PHP di Mac OS X

  4. Susunan tidak bersarang dengan satu tingkat

  5. Bagaimana cara mengubah jenis kolom di Heroku?