Escolar Documentos
Profissional Documentos
Cultura Documentos
LBD Programacao BD SProcedure Trigger PDF
LBD Programacao BD SProcedure Trigger PDF
SGDB
Banco de
Dados
Por meio dos SGBD - Sistema Gerenciador de Banco de Dados - é possível gerenciar o
acesso a dados em um BD.
Por exemplo:
Stored Procedure
Sintaxe básica:
Definição da função:
------------------------------------------------------------------------------------------------------------------
Create function nome_da_função (tipo_dado_variavel1, tipo_dado_variavel2, …
tipo_dado_variavelN)
Return tipo AS
'<corpo da função>'
LANGUAGE `nome da linguagem usada no corpo`
--------------------------------------------------------------------------------------------------------------
uso da função:
---------------------------------------------------------------------------------------------------------------------------------
nome_da_função(valor_para_variavel1,valor_para_variavel1, ..., valor_para_variavelN)
---------------------------------------------------------------------------------------------------------------------------------
A aspa no nome da linguagem pode ser opcional, depende da versão do Postgresql (no
8.3 ela já é opcional)
Quando definimos que a linguagem de uma função e sql, LANGUAGE SQL, só podemso
empregar comandos da sql em seu corpo.
Nota de Aula 2
Prof. Sidney Vieira
A definição do corpo da função depende da linguagem para plpgsql, devendo ser
delimitada por aspas simples ' ou cifrão duplo $$. Obedece a seguinte sintaxe:
Uso de ' para delimitar o corpo da função Uso de '$$ para delimitar o corpo da função
'declare $$declare
variavel1 tipo_da_varialvel1, variavel1 tipo_da_varialvel1,
variavel2 tipo_da_variavel2, variavel2 tipo_da_variavel2,
... ...
BEGIN BEGIN
INSTRUÇÃO 1 INSTRUÇÃO 1
INSTRUÇÃO 2 INSTRUÇÃO 2
RETURN VALOR RETORNO RETURN VALOR RETORNO
END;' END;$$
Obs:
1 – a declaração de variáveis, por meio da palavra reservada declare, é opcional
2 - Para que uma função retorne mais de um valor, mais de uma linha de uma tabela, o
tipo de dado no retorno return tipo deve ser SETOF nome_tabela
3 - As variáveis que correspondem aos n-valores passados como parâmetros para a
função devem ser referenciadas como $1, $2, $3, .. $n
4 – Quando o corpo da função for definido com o uso de aspas simples devemos
delimitar a função com $$ para que o compilador não interprete a aspa simples do corpo
da função como fim da função.
Exemplos:
3 - Função que totaliza os valores de itens de uma nota de venda da tabela item_nota
Etapas:
Nota de Aula 4
Prof. Sidney Vieira
4.4 usar a função que retorna o maior salario
select maior_salario();
6 – Função que retorna o nome dos clientes que fizeram cadastro hoje( data corrente)
usando a função:
select valortotal();
Nota de Aula 5
Prof. Sidney Vieira
create function dataultimavenda() returns date
as 'select max(data) from venda;'
language sql;
usando a função:
select dataultimavenda();
TRIGGER
Uma função de gatilho, trigger, é uma ação que o SGBD deve desencadear antes ou
depois de um dos seguintes comandos: insert, update ou delete.
Sintaxe:
Create trigger nome_gatilho {before ou after} {evento[or evento]} on table for each {row
ou STATEMENT } execute procedure nome_função (v1,v2,...,vn)
NEW → Tipo de dado RECORD; variável contendo a nova linha do banco de dados, para as
operações de INSERT/UPDATE nos gatilhos no nível de linha.
OLD → Tipo de dado RECORD; variável contendo a antiga linha do banco de dados, para as
operações de UPDATE/DELETE nos gatilhos no nível de linha. .
TG_WHEN → Tipo de dado text; uma cadeia de caracteres contendo BEFORE ou AFTER,
dependendo da definição do gatilho.
TG_OP → Tipo de dado text; uma cadeia de caracteres contendo INSERT, UPDATE, ou
DELETE, informando para qual operação o gatilho foi disparado.
TG_RELID → Tipo de dado oid; o ID de objeto da tabela que causou o disparo do gatilho.
Nota de Aula 6
Prof. Sidney Vieira
TG_RELNAME → Tipo de dado name; o nome da tabela que causou o disparo do gatilho.
Exemplos:
1 – Gatilho que após efetuar uma inclusão, alteração ou exclusão na tabela func
armazema dados para auditoria na tabela func_auditoria
Nota de Aula 7
Prof. Sidney Vieira
END IF;
RETURN NULL; -- o resultado é ignorado uma vez que este é um gatilho AFTER
END;
$$ language plpgsql;
-----------------------------------------------------------------------------------------------------------------
Quando algum usuario fizer um insert, update ou delete na tabela func o SGBD registrará os
dados na tabela func_auditoria
Exemplo: se fizermos uma conexão com o sgbd com o usuario postgres e atualizar a tabela func
com o comando::
2 – Gatilho que antes de efetuar uma inserção na tabela func verifica se o nome do
funcionario é nulo e se o salario é nulo ou menor do que zero caso seja não faz a inclusão
e emite uma mensagem
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
----------------------------------------------------------------------------------------------------------------
terceiro: o uso
--------------------------------------------------------------------------------------
ERROR: O nome do empregado não pode ser nulo.
------------------------------------------------------------------------------------
Nota de Aula 9
Prof. Sidney Vieira
3 – Gatilho que ao se efetuar uma inserção na tabela venda armazena na tabela data os
seguintes valores usuario que realizou o login, a palavra "venda" e a data com hora na
atual.
Create trigger auditoria after insert on venda for each Statement execute procedure
inseriu();
Create trigger atualiza_preco_venda after update on produto for each row execute
procedure incluir_historico();
Nota de Aula 10
Prof. Sidney Vieira