Scrittura di funzioni PL/pgSQL
Introduzione
PostgreSQL è molto più di un semplice motore RDBMS. È una piattaforma di
sviluppo. Fornisce un linguaggio di programmazione molto potente e flessibile
chiamato PL/pgSQL. Usando questo linguaggio puoi scrivere le tue
funzioni definite dall’utente per ottenere livelli di astrazione e calcoli
procedurali che sarebbero difficili da ottenere con il semplice SQL (e a volte
impossibili da ottenere senza passare attraverso l’applicazione).

Scrivere funzioni
Nello schema public, fai clic destro sul nodo Funzioni e clicca su Crea
Funzione. Si aprirà una scheda interna Query SQL, già contenente un
modello SQL per aiutarti a creare la tua prima funzione PL/pgSQL.


Puoi consultare la documentazione di PostgreSQL su come scrivere funzioni definite dall’utente. Basta fare clic destro sul nodo Funzioni e cliccare su Doc: Functions — si aprirà la pagina di documentazione PostgreSQL pertinente nel tuo browser web (il browser predefinito del sistema nell’app desktop, oppure una nuova scheda quando esegui OmniDB in modalità browser tramite Distribuzione di omnidb-server).
Per ora, sostituiamo interamente questo modello SQL con il codice sorgente seguente:
CREATE OR REPLACE FUNCTION public.fnc_count_vowels (p_input text)
RETURNS integer LANGUAGE plpgsql AS
$function$
DECLARE
str text;
ret integer;
i integer;
len integer;
BEGIN
str := upper(p_input);
ret := 0;
i := 1;
len := length(p_input);
WHILE i <= len LOOP
IF substr(str, i, 1) in ('A', 'E', 'I', 'O', 'U') THEN
ret := ret + 1;
END IF;
i := i + 1;
END LOOP;
RETURN ret;
END;
$function$
Questo creerà una funzione chiamata fnc_count_vowels all’interno dello
schema public. Questa funzione accetta un argomento di tipo testo chiamato
p_input e conta quante vocali sono presenti in questa stringa. Poi
restituisce questo conteggio.
Per creare la funzione, esegui il comando nella scheda interna Query SQL. Se l’operazione ha successo, la funzione apparirà sotto il nodo dell’albero Funzioni (puoi aggiornarlo facendo clic destro e poi cliccando su Aggiorna). Espandendo anche il nodo della funzione, puoi vedere il suo tipo di ritorno e il suo argomento.

Ora eseguiamo questa nuova funzione per la prima volta. Apri una semplice scheda interna Query SQL ed esegui la seguente query SQL:
SELECT public.fnc_count_vowels('The quick brown fox jumps over the lazy dog.')

Nota come la query restituisca un singolo valore, contenente il numero di vocali nel testo.
Facendo clic destro sul nodo della funzione, puoi vedere che sono disponibili azioni per modificarla, selezionarla ed eliminarla. Come probabilmente avrai intuito, ciascuna azione aprirà schede interne Query SQL con comodi modelli SQL già pronti.