.NET

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.