Escolar Documentos
Profissional Documentos
Cultura Documentos
OBJETIVOS
• Entender o que são Funções
• Entender o que são Triggers e sua importância prática na montagem de
rotinas após comandos de inserção, atualização ou remoção de dados
3
AGENDA
• STORED PROCEDURES
• FUNCTIONS
• Conceitos
• Tipos de Funções
• Exemplos
• TRIGGERS
• Conceitos
• Exemplos
4
INTRODUÇÃO
• Stored Procedures são blocos de comandos que têm como objetivo
executar uma série de comandos SQL no servidor de banco de dados
• O conceito é análogo a criação de um método em uma linguagem de
programação, onde você pode chamar este método diversas vezes sem a
necessidade de reescrever código
• Exemplos de utilização:
• Implementação de rotinas de limpeza de dados não mais utilizados
• Correção de dados digitados errados
• Script para padronização da digitação de determinado campo
• Inserção conjunta de dados em mais de uma tabela
• etc
6
PARÂMETROS DE UM STORED
PROCEDURE
• Os parâmetros são opcionais e, caso não sejam necessários, devem
permanecer apenas os parênteses vazios na declaração do procedure
• Para que um procedimento receba parâmetros, é necessário seguir certa
sintaxe:
8
PARÂMETROS DE UM STORED
PROCEDURE
• Os valores possíveis para o modo são:
• IN: indica que o parâmetro é apenas uma entrada de dados, não podendo
ser usada para retorno;
• OUT: usado para parâmetros de saída;
• Para esse tipo não pode ser informado um valor direto (como ‘tese’, 1 ou 2.3),
deve ser passada uma “variável por referência”
• INOUT: como é possível imaginar, esse tipo de parâmetro pode ser usado
para os dois fins (entrada e saída de dados)
• Nesse caso também deve ser informada uma variável e não um valor direto
9
SP COM PARÂMETROS DE
ENTRADA
11
SP COM PARÂMETROS DE
ENTRADA E SAÍDA
13
ATENÇÃO
• Ao trabalharmos com o SGBD PostgreSQL não temos necessariamente a
função Stored Procedure (SP) definida, como podemos encontrar em
diversos outros tipos de SGBD’s, como o MYSQL, por exemplo.
• As SPs no Postgres são definidas como FUNCTIONS, assim como as triggers,
tornando esse recurso um pouco mais complicado, dependendo inclusive
do seu tipo de retorno.
FUNÇÕES
15
FUNÇÕES
• Assim como ocorre com os Store Procedures, é possível ter uma
sequência de comandos SQL encapsulados em estruturas
denominadas funções
• Tanto os Stored Procedures como as Funções são procedimentos
executados diretamente no servidor SQL Server, porém o Stored
Procedure não tem obrigação de retornar valores para o usuário. Já
a Função sim, ela deve retornar sempre um determinado dado eu
até mesmo um conjunto de dados
16
FUNÇÕES (CONTINUAÇÃO)
• As funções internas já foram exploradas anteriormente (AVG, MIN,
SUM...). Aqui as funções são definidas de acordo com o que é
necessário para o usuário, com parâmetros de entrada e variáveis
locais.
• Uma função é executada como uma parte de uma expressão.
17
FUNÇÕES
As funções podem ser utilizadas do mesmo modo que uma função
interna, sendo mais usada como:
• uma expressão na lista de um comando SELECT;
• uma expressão em uma cláusula WHERE ou HAVING;
• uma expressão em uma cláusula ORDER BY ou GROUP BY;
• uma expressão na cláusula SET de um comando UPDATE;
• uma expressão na cláusula VALUES de um comando INSERT.
18
FUNÇÕES
• Construção sintática:
FUNÇÕES
• Apagar Função :
• Sintaxe
• DROP FUNCTION nome_função;
• Chamar Função:
• Sintaxe
• SELECT nome_função;
20
FUNÇÕES: EXEMPLO 1
FUNÇÕES: EXEMPLO 1
• Criar função para selecionar a quantidade de funcionários no banco de dados
delimiter $$
Para termos o retorno da função por
create function total_funcionario() meio de uma variável, é necessário
returns int declará-la como variável local no
MySQL
begin
declare total_funcionarios int;
select count(*) into total_funcionarios from funcionario;
return total_funcionarios;
end $$
delimiter;
22
FUNÇÕES: EXEMPLO 1
• Chamar função:
• Select total_funcionario();
Existem 4 funcionários no BD
23
FUNÇÕES: EXEMPLO 2
• Criar função para somar os salários dos funcionários:
delimiter $$
create function totalsalario()
returns float
begin
declare soma float;
select sum(salario) into soma from funcionario;
return soma;
end $$
delimiter;
24
EXERCÍCIO 1
No MySQL:
1. Criar a tabela Funcionario(codigo, nome, email, telefone, profissao,
endereco, salario).
2. Inserir os dados na tabela Funcionario.
3. Criar uma função que recebe o código do funcionário como argumento
e dobra o salário dele.
25
EXEMPLO 1
Tabela Empregados:
EXEMPLO 1
Criação da Função:
Chamando a Função:
TRIGGERS (GATILHOS)
Exemplos MYSQL
30
TRIGGERS (GATILHOS)
• Vamos criar um banco de dados com as seguintes tabelas:
Estoque
QUANTIDADE: INT
31
TRIGGERS (GATILHOS)
• Procedimentos invocados quando um comando DML é executado (INSERT,
UPDATE ou DELETE)
Usuário faz um
pedido: Gatilho de Baixa Tabela ESTOQUE
INSERT NA TABELA Estoque Coluna Quantidade
ITEM
32
TRIGGERS (GATILHOS)
• Usos de um Trigger:
• Validação e Integridade de dados
• Rastreamento de logs de tabelas
• Arquivamento de registros históricos
• Um Trigger é associado a uma única tabela
• É executado automaticamente (diferente dos Stored Procedures e Funções)
33
TRIGGERS (GATILHOS)
• Sintaxe:
EXEMPLO DE GATILHOS
• Suponha clientes comprando produtos por meio de pedidos. Esses clientes
podem fazer vários pedidos e em cada pedido que fazem podem comprar
muitos produtos. Você realiza a venda de cada produto, registrando os
dados na tabela ItensVendidos. A cada item vendido, seu sistema deve
realizar a baixa da quantidade vendida desse produto no estoque. Para
fazer esta baixa de estoque, você pode utilizar um gatilho.
35
GATILHOS
• Criando o gatilho:
36
EXEMPLO DE GATILHOS
• Tabela Estoque:
EXEMPLO DE GATILHOS
• Para disparar o gatilho anterior, execute os seguintes comandos:
• Inserindo um novo pedido:
insert into pedido(pedcodigo, data, endereco, cliente)
values (9, '2017-12-01', 'rua x', 1)
TRIGGERS (GATILHOS)
Exemplo de criação de Triggers no PostgreSQL
39
EXEMPLO 1
• Exemplo: Ao inserirmos um novo registro na tabela de Funcionarios,
gostaríamos de salvar em uma tabela Funcionário_Auditoria, o dia e a hora
que esse funcionário foi inserido na tabela Funcionários.
40
EXEMPLO 1
• Criar a tabela Funcionários
EXEMPLO 1
• Criar a tabela Funcionarios_Auditoria
EXEMPLO 1
• Criar a Função da Trigger
A variável NEW é do tipo CREATE funcionario_log_func()
RECORD e contém uma nova RETURNS trigger AS $teste_trigger$
linha a ser armazenada com BEGIN
base nos comandos INSERT INTO funcionarios_auditoria
INSERT/UPDATE das triggers a (codigo, data_alteracao)
nível de linha
VALUES
(new.codigo, current_timestamp);
PLpgSQL é uma linguagem RETURN NEW;
estrutural estendida da SQL END;
que tem por objetivo auxiliar as
$teste_trigger$ LANGUAGE plpgsql;
tarefas de programação
no PostgreSQL
43
EXEMPLO 1
• Criar a Trigger
EXEMPLO 1
• Inserir os dados:
INSERT INTO FUNCIONARIOS (codigo, nome, email, telefone, profissao, endereco,
salario) VALUES (2, 'Marilia Késsia', 'mkessia.dionisio@gmail.com', '(81)997402844',
'Analista de desenvolvimento', 'rua testes', 6000.00);
INSERT INTO FUNCIONARIOS (codigo, nome, email, telefone, profissao, endereco,
salario) VALUES (3, 'Caroline França', 'carol@gmail.com', '(81)997402800', 'Analista de
testes', 'rua testes', 2500.00);
INSERT INTO FUNCIONARIOS (codigo, nome, email, telefone, profissao, endereco,
salario) VALUES (4, 'João da Silva', 'joao@gmail.com', '(81)997401654', 'Analista de
finanças', 'rua testes', 8000.00);
INSERT INTO FUNCIONARIOS (codigo, nome, email, telefone, profissao, endereco,
salario) VALUES (5, 'Maria das Dores', 'maria@gmail.com', '(81)997407845', 'Secretaria',
'rua testes', 1800.00);
45
EXEMPLO 1
• Select * From Funcionarios