quarta-feira, 1 de novembro de 2023

Functions, Triggers e Procedures no PostgreSQL

   

       Nesse artigo vou trazer um exemplo de Functions, Triggers e Procedures no PostgreSQL. Antes vamos entender um pouco a diferença entre eles:

         

1.   Funções (Functions):

·         As funções são rotinas ou subprogramas que recebem um ou mais parâmetros de entrada, realizam cálculos ou operações e retornam um valor.

·         Elas podem ser chamadas a partir de instruções SQL, expressões ou outras funções.

·         As funções podem ser usadas para encapsular lógica de negócio complexa e fornecer um resultado computado.

·         Exemplo: Uma função que calcula a idade com base na data de nascimento.

2.   Triggers:

·         Triggers são procedimentos armazenados que são automaticamente invocados em resposta a um evento específico que ocorre no banco de dados.

·         Eles são acionados por ações, como inserção, atualização ou exclusão de dados em uma tabela.

·         Os triggers podem ser usados para impor regras de negócio, manter integridade referencial, auditar alterações de dados, entre outras funcionalidades.

·         Exemplo: Um trigger que atualiza um campo de data de modificação sempre que uma linha é atualizada em uma tabela.

3.   Procedimentos (Procedures):

·         Os procedimentos são rotinas ou subprogramas que podem receber parâmetros de entrada, executar um conjunto de instruções e, opcionalmente, retornar valores.

·         Eles são usados para agrupar um conjunto de instruções que podem ser executadas repetidamente ou como uma unidade lógica.

·         Os procedimentos podem ser chamados a partir de outros procedimentos, instruções SQL ou de uma aplicação externa.

·         Exemplo: Um procedimento que insere um registro em uma tabela e atualiza um contador.

 

Agora vamos aos exemplos:

 

1 – Function

 

-- Função

CREATE OR REPLACE FUNCTION calcularIdade(data_nascimento DATE) RETURNS INTEGER AS

DECLARE

  idade INTEGER;

BEGIN

  idade := EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM data_nascimento);

  RETURN idade;

END;

LANGUAGE plpgsql;

 

--Chamada da função

SELECT calcularIdade('1990-05-10');

 

2 – Trigger

 

-- Temos uma tabela

CREATE TABLE produtos (

  id SERIAL PRIMARY KEY,

  nome VARCHAR(50),

  quantidade INTEGER,

  data_atualizacao DATE

);

 

-- Criação da função usada pelo Trigger

CREATE OR REPLACE FUNCTION atualizarDataAtualizacao()

  RETURNS TRIGGER AS

DECLARE

BEGIN

  NEW.data_atualizacao := CURRENT_DATE;

  RETURN NEW;

END;

LANGUAGE plpgsql;

 

-- Criação da Trigger

CREATE TRIGGER trigger_atualizar_data

  BEFORE INSERT OR UPDATE ON produtos

  FOR EACH ROW

  EXECUTE FUNCTION atualizarDataAtualizacao();

 

-- Utilização da Trigger ocorre automaticamente

INSERT INTO produtos (nome, quantidade) VALUES ('Produto A', 10);

UPDATE produtos SET quantidade = 20 WHERE id = 1; 

 

Note nesse trecho de código, na criação da função da trigger, o uso da palavra NEW. NEW é uma referência a uma variável especial em PL/pgSQL usada em gatilhos (triggers) no PostgreSQL. Quando um gatilho é acionado, ele tem acesso a duas variáveis especiais: OLD e NEW.

 

OLD contém os valores anteriores das colunas afetadas pela ação que disparou o gatilho.

NEW contém os novos valores que serão inseridos ou já foram inseridos devido à ação que disparou o gatilho.

 

No trecho de código acima, NEW.data_atualizacao está sendo usado para atribuir a data atual à coluna data_atualizacao da linha que está sendo inserida ou atualizada.

 

3 – Procedure

-- Criação da Procedure

CREATE OR REPLACE PROCEDURE inserirProduto(nome VARCHAR(50), quantidade INTEGER)

  AS

DECLARE

BEGIN

  INSERT INTO produtos (nome, quantidade, data_atualizacao)

  VALUES (nome, quantidade, CURRENT_DATE);

END;

LANGUAGE plpgsql;

 

-- Utilização da Procedure

CALL inserirProduto('Produto B', 15);

Nenhum comentário:

Postar um comentário