PostgreSQL - Funzioni

PostgreSQL functions, note anche come stored procedure, consentono di eseguire operazioni che normalmente richiederebbero diverse query e round trip in un'unica funzione all'interno del database. Le funzioni consentono il riutilizzo del database poiché altre applicazioni possono interagire direttamente con le stored procedure anziché con un codice di livello intermedio o di duplicazione.

Le funzioni possono essere create in un linguaggio a tua scelta come SQL, PL / pgSQL, C, Python, ecc.

Sintassi

La sintassi di base per creare una funzione è la seguente:

CREATE [OR REPLACE] FUNCTION function_name (arguments) 
RETURNS return_datatype AS $variable_name$
   DECLARE
      declaration;
      [...]
   BEGIN
      < function_body >
      [...]
      RETURN { variable_name | value }
   END; LANGUAGE plpgsql;

Dove,

  • function-name specifica il nome della funzione.

  • L'opzione [OR REPLACE] consente di modificare una funzione esistente.

  • La funzione deve contenere un file return dichiarazione.

  • RETURNla clausola specifica il tipo di dati che si intende restituire dalla funzione. Ilreturn_datatype può essere un tipo di base, composto o di dominio oppure può fare riferimento al tipo di una colonna della tabella.

  • function-body contiene la parte eseguibile.

  • La parola chiave AS viene utilizzata per creare una funzione autonoma.

  • plpgsqlè il nome del linguaggio in cui è implementata la funzione. Qui utilizziamo questa opzione per PostgreSQL, può essere SQL, C, interno o il nome di un linguaggio procedurale definito dall'utente. Per compatibilità con le versioni precedenti, il nome può essere racchiuso tra virgolette singole.

Esempio

L'esempio seguente illustra la creazione e la chiamata di una funzione autonoma. Questa funzione restituisce il numero totale di record nella tabella AZIENDA. Useremo la tabella AZIENDA , che ha i seguenti record:

testdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

La funzione totalRecords () è la seguente:

CREATE OR REPLACE FUNCTION totalRecords ()
RETURNS integer AS $total$
declare
	total integer;
BEGIN
   SELECT count(*) into total FROM COMPANY;
   RETURN total;
END;
$total$ LANGUAGE plpgsql;

Quando viene eseguita la query di cui sopra, il risultato sarebbe:

testdb# CREATE FUNCTION

Ora, eseguiamo una chiamata a questa funzione e controlliamo i record nella tabella COMPANY

testdb=# select totalRecords();

Quando viene eseguita la query di cui sopra, il risultato sarebbe:

totalrecords
--------------
      7
(1 row)