PostgreSQL - Funciones

PostgreSQL functions, también conocidos como Procedimientos almacenados, le permiten realizar operaciones que normalmente tomarían varias consultas y viajes de ida y vuelta en una sola función dentro de la base de datos. Las funciones permiten la reutilización de la base de datos, ya que otras aplicaciones pueden interactuar directamente con sus procedimientos almacenados en lugar de un código de nivel intermedio o duplicado.

Las funciones se pueden crear en un lenguaje de su elección como SQL, PL / pgSQL, C, Python, etc.

Sintaxis

La sintaxis básica para crear una función es la siguiente:

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;

Dónde,

  • function-name especifica el nombre de la función.

  • La opción [O REEMPLAZAR] permite modificar una función existente.

  • La función debe contener un return declaración.

  • RETURNcláusula especifica el tipo de datos que va a devolver de la función. losreturn_datatype puede ser un tipo base, compuesto o de dominio, o puede hacer referencia al tipo de columna de una tabla.

  • function-body contiene la parte ejecutable.

  • La palabra clave AS se utiliza para crear una función independiente.

  • plpgsqles el nombre del lenguaje en el que se implementa la función. Aquí, usamos esta opción para PostgreSQL, puede ser SQL, C, interno o el nombre de un lenguaje procedimental definido por el usuario. Para compatibilidad con versiones anteriores, el nombre puede ir entre comillas simples.

Ejemplo

El siguiente ejemplo ilustra la creación y la llamada de una función independiente. Esta función devuelve el número total de registros en la tabla EMPRESA. Usaremos la tabla EMPRESA , que tiene los siguientes registros:

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 función totalRecords () es la siguiente:

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;

Cuando se ejecuta la consulta anterior, el resultado sería:

testdb# CREATE FUNCTION

Ahora, ejecutemos una llamada a esta función y verifiquemos los registros en la tabla EMPRESA

testdb=# select totalRecords();

Cuando se ejecuta la consulta anterior, el resultado sería:

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