PostgreSQL - Funções

PostgreSQL functions, também conhecidos como Procedimentos armazenados, permitem que você execute operações que normalmente levariam várias consultas e viagens de ida e volta em uma única função dentro do banco de dados. As funções permitem a reutilização do banco de dados, pois outros aplicativos podem interagir diretamente com seus procedimentos armazenados em vez de um código de camada intermediária ou duplicado.

As funções podem ser criadas em uma linguagem de sua escolha, como SQL, PL / pgSQL, C, Python, etc.

Sintaxe

A sintaxe básica para criar uma função é a seguinte -

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;

Onde,

  • function-name especifica o nome da função.

  • A opção [OU REPLACE] permite modificar uma função existente.

  • A função deve conter um return declaração.

  • RETURNcláusula especifica o tipo de dados que você vai retornar da função. oreturn_datatype pode ser um tipo básico, composto ou de domínio, ou pode fazer referência ao tipo de uma coluna da tabela.

  • function-body contém a parte executável.

  • A palavra-chave AS é usada para criar uma função autônoma.

  • plpgsqlé o nome da linguagem na qual a função é implementada. Aqui, usamos esta opção para PostgreSQL, pode ser SQL, C, interno ou o nome de uma linguagem procedural definida pelo usuário. Para compatibilidade com versões anteriores, o nome pode ser colocado entre aspas simples.

Exemplo

O exemplo a seguir ilustra a criação e chamada de uma função autônoma. Esta função retorna o número total de registros na tabela COMPANY. Usaremos a tabela COMPANY , que contém os seguintes 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)

A função totalRecords () é a seguinte -

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;

Quando a consulta acima é executada, o resultado seria -

testdb# CREATE FUNCTION

Agora, vamos executar uma chamada para esta função e verificar os registros na tabela COMPANY

testdb=# select totalRecords();

Quando a consulta acima é executada, o resultado seria -

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