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