PostgreSQL - Функции

PostgreSQL functions, также известные как хранимые процедуры, позволяют выполнять операции, которые обычно требуют нескольких запросов и циклических обращений в одной функции в базе данных. Функции позволяют повторно использовать базу данных, поскольку другие приложения могут напрямую взаимодействовать с вашими хранимыми процедурами вместо кода промежуточного уровня или дублирующего кода.

Функции можно создавать на любом языке по вашему выбору, например, SQL, PL / pgSQL, C, Python и т. Д.

Синтаксис

Основной синтаксис для создания функции следующий:

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;

Где,

  • function-name указывает имя функции.

  • Опция [OR REPLACE] позволяет изменять существующую функцию.

  • Функция должна содержать return заявление.

  • RETURNПредложение определяет тип данных, который вы собираетесь вернуть из функции. Вreturn_datatype может быть базовым, составным или доменным типом или может ссылаться на тип столбца таблицы.

  • function-body содержит исполняемую часть.

  • Ключевое слово AS используется для создания автономной функции.

  • plpgsql- это имя языка, на котором реализована функция. Здесь мы используем этот параметр для PostgreSQL, это может быть SQL, C, внутренний или имя определяемого пользователем процедурного языка. Для обратной совместимости имя может быть заключено в одинарные кавычки.

пример

В следующем примере показано создание и вызов автономной функции. Эта функция возвращает общее количество записей в таблице КОМПАНИЯ. Мы будем использовать таблицу COMPANY , в которой есть следующие записи -

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)

Функция totalRecords () выглядит следующим образом -

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;

Когда вышеуказанный запрос будет выполнен, результат будет -

testdb# CREATE FUNCTION

Теперь давайте выполним вызов этой функции и проверим записи в таблице COMPANY

testdb=# select totalRecords();

Когда вышеуказанный запрос будет выполнен, результат будет -

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