Escritura de funciones PL/pgSQL
Introducción
PostgreSQL es mucho más que un motor de SGBDR. Es una plataforma de desarrollo. Ofrece
un lenguaje de programación muy potente y flexible llamado PL/pgSQL. Con este
lenguaje puede escribir sus propias funciones definidas por el usuario para lograr niveles
de abstracción y cálculos procedimentales que serían difíciles de conseguir con SQL
puro (y a veces imposibles de lograr sin cambiar de contexto con la
aplicación).

Escritura de funciones
En el esquema public, haga clic derecho en el nodo Functions y haga clic en Create
Function. Se abrirá una pestaña interna SQL Query, ya con una plantilla
SQL para ayudarle a crear su primera función PL/pgSQL.


Puede consultar la documentación de PostgreSQL sobre cómo escribir funciones definidas por el usuario. Simplemente haga clic derecho en el nodo Functions y haga clic en Doc: Functions — se abrirá la página correspondiente de la documentación de PostgreSQL en su navegador web (el navegador predeterminado del sistema en la aplicación de escritorio, o una nueva pestaña cuando se ejecuta como OmniDB Server basado en navegador).
Por ahora, sustituyamos por completo esta plantilla SQL por el código fuente siguiente:
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$
Esto creará una función llamada fnc_count_vowels dentro del esquema
public. Esta función recibe un argumento de tipo texto llamado p_input y cuenta cuántas
vocales hay en esta cadena. Luego devuelve ese conteo.
Para crear la función, ejecute el comando en la pestaña interna SQL Query. Si tiene éxito, la función aparecerá bajo el nodo del árbol Functions (puede actualizarlo haciendo clic derecho y luego clic en Refresh). Al expandir también el nodo de la función, puede ver su tipo de retorno y su argumento.

Ahora ejecutemos esta nueva función por primera vez. Abra una pestaña interna SQL Query sencilla y ejecute la siguiente consulta SQL:
SELECT public.fnc_count_vowels('The quick brown fox jumps over the lazy dog.')

Observe cómo la consulta devuelve un único valor, que contiene el número de vocales en el texto.
Al hacer clic derecho en el nodo de la función, puede ver que hay acciones para editarla, consultarla y eliminarla. Como probablemente habrá adivinado, cada acción abrirá pestañas internas SQL Query con plantillas SQL útiles ya incluidas.