-
Vamos a
-
um outro
uso muito importante das triggers,
-
que é para uma função nobre
e tão utilizada
-
por administradores de banco de dados,
a auditoria do que está acontecendo.
-
Então eu posso criar uma tabela
que eu chamo de auditoria e registrar
-
quando alguém cadastrou alguma coisa,
apagou ou removeu, guardando esses dados
-
como backup, por exemplo, ou simplesmente
podemos saber quem é que apagou. Ok?
-
Quando isso.
-
São informações muito importantes, então
eu posso utilizar a trigger para isso.
-
Vamos a um exemplo.
-
Eu tenho um exemplo aqui
-
pronto pra gente brincar,
então vou criar tabela de auditoria.
-
Portanto, agora no início
essa tabela vai guardar o código
-
a hora que a ação que esta ação aconteceu.
-
Qual é a operação em si?
-
A antiga informação e a nova?
-
Como eu mencionei, eu poderia
até mesmo guardar o usuário que fez isso,
-
mas eu vou manter então o exemplo
exatamente como estava ou criar aqui
-
a tabela de auditoria.
-
Muito bem a tabela criada e agora eu vou
-
criar uma procedure.
-
Então na sequência aqui
eu vou criar uma procedure
-
para dar uma automatizada nessa operação.
-
E com a procedure eu também posso
-
burlar de certa maneira seca, bolar
a palavra correta,
-
mas eu posso com a procedure
fazer o commit desse insert.
-
Não posso registrar de fato
o que está acontecendo,
-
já que a trilha me impede de chamar
esse tipo de operação dentro do seu corpo.
-
Então vai criar uma procedure
antes que vai registrar a operação
-
na tabela de auditoria.
-
Então eu tenho aqui um create
replace proceder registra
-
código operação antigo novo.
-
Tá, eu tenho até um pragma
autonomos a transaction aqui para que ela
-
para que eu tenha certeza que a seguir vai
poder executá la com sucesso.
-
E aqui está a operação em si.
-
Insert into auditoria as cinco
-
informações em si, as 4/1
-
quatro delas eu vou passar como parâmetro,
mas uma delas eu não preciso.
-
Uma delas é a data e hora atuais.
-
E aí eu apelo para o SIS
Deixa aí para me dar essa informação.
-
Então eu vou criar procedure. Vamos lá.
-
Procedimento criado esse procedimento
-
então vai registrar informação
e trazer o output para baixo.
-
E agora sim
eu vou fazer a trigger a trigger.
-
Então um creator replace trigger
Mudanças salariais
-
vou chamar sempre antes de inserir
ou atualizar ou mesmo remover informações
-
da tabela de empregados, que é uma tabela
sensível, tem salários e tudo mais.
-
E para cada linha
que eu for fazer uma mudança
-
eu vou fazer o seguinte procedimento
Eu vou, eu vou fazer uma alternância.
-
Então tem um case bem aqui,
no momento que eu tiver inserindo,
-
então o insert eu vou chamar o Registra.
-
Passando a nova,
o código do novo funcionário,
-
o qual é a ação que eu quero registrar,
o insert,
-
a inserção, o antigo salário e o novo.
-
Embora como é um Sporting,
-
eu não tenho o antigo aqui
que essa informação vai ficar zerada.
-
No final das contas
o update e a única diferença aqui
-
é que eu vou pegar o código antigo
como referência aqui
-
e vai ser uma atualização
e não uma inserção.
-
E no delito
eu tenho praticamente a mesma linha.
-
A diferença é que
eu vou registrar que a ação que aconteceu
-
foi uma remoção,
foi um apagar e aqui eu vou executar.
-
Portanto vou criar
então essa minha, essa minha trigger.
-
Muito bem,
-
Então eu criei uma trigger
que a grande lógica por trás da Trigger
-
na verdade é uma possível,
e ela está sendo chamada aqui no registro,
-
então eu posso, portanto, ter uma trigger
chamando procedure,
-
não tem problema nenhum.
-
E agora se eu vou fazer um teste,
então eu tenho o server Output Show,
-
embora nesse exemplo ele se torne
desnecessário no final das contas
-
eu vou para ter certeza
alterar o formato da data
-
para um formato mais amigável
aqui no Brasil.
-
Então isso aqui é
só para eu poder ter a data e hora
-
no formato mais interessante.
-
Pronto, alterado.
-
E agora eu vou inserir um novo novo
funcionário, eu estou inserindo aqui,
-
ele vai ser código 1000
e ele vai ter o salário de 2780.
-
Portanto quando eu clico aqui,
repare que uma linha foi inserida
-
e além da linha Sinceridade,
permita me mostrar aqui
-
a tabela de funcionários com esse
novo funcionário em que no igual a 1000.
-
Então
-
esse cara que eu
-
acabei de inserir também aqui,
-
repare que eu não passei as outras
informações.
-
Eu só tenho o código e o salário
no final das contas,
-
que é o que interessa
para a minha procedure de auditoria.
-
Então vou dar um select aqui.
-
Repare que além da inserção na tabela,
então de funcionar
-
essa linha que não existia,
ele também deu insert.
-
Ele disparou insert automático
na minha tabela de auditoria.
-
Código 1000.
-
Essa data e hora que eu acabei de fazer
a função insert.
-
O antigo salário não existe
e o novo salário é 2780.
-
Eu posso fazer um update, portanto eu vou
-
então atualizar o salário
desse mesmo funcionário.
-
Pronto, minha autorização atualizada
eu vou olhar
-
agora na tabela de funcionário
e repare que eu dobrei o salário dele.
-
O salário era de 2180, se tornou 5560,
agora do mesmo cara número 1000.
-
E agora na tabela de auditoria
-
eu tenho registrado não
só o momento que eu inserir o funcionário,
-
mas também o momento com data, hora,
minuto, tudo certinho
-
de quando eu mudei o salário dele,
quando eu dobrei o salário dele.
-
E pra terminar então a demonstração,
por que não aproveitar
-
e apagar esse funcionário
que eu acabei de criar?
-
Então um empinou aqui igual a 1000
-
e vou
-
apagar esse funcionário,
portanto está apagado
-
e na tabela
aqui no select asterisco auditoria.
-
Repare que eu tenho
as três operações registradas o momento,
-
conhecer o funcionário, o momento que eu
atualizei e o momento que eu o removi.
-
Então eu consigo.
-
Aqui tem informação e aqui no código
eu consigo saber exatamente quem foi, né?
-
Então sempre essas três operações
aconteceram pro meu empregado 1000.
-
Então repare como acaba
-
sendo simples
de criar uma tabela de auditoria
-
e dentro dessa tabela, portanto,
eu posso guardar qualquer informação
-
para depois fazer algum tipo de acareação
ou saber se alguém apagou
-
por engano ou não, ou deu
um aumento de salário que fosse indevido.
-
Eu consigo, portanto, ter uma boa visão
do que acontece dentro
-
do meu banco de dados.