Você está na página 1de 11

15/08/2022 10:54 Triggers PL/SQL: saiba quando e por que usar

Artigo

Invista em você! Saiba como a DevMedia pode ajudar sua


carreira.

Triggers PL/SQL: saiba quando e por


que usar
Veja neste artigo qual a necessidade e do por que da utilização de triggers em bases de dados.
Será explicado o uso das Triggers em bases PL SQL da Oracle.

Voltar Anotar Marcar como concluído

Utilizamos cookies para fornecer uma melhor experiência


Artigos para nossos usuários, consulte nossa política de
privacidade.
Banco de Dados
Aceitar 19

i ib
https://www.devmedia.com.br/triggers-pl-sql-saiba-quando-e-por-que-usar/30011 d 1/11
15/08/2022 10:54 Triggers PL/SQL: saiba quando e por que usar
Triggers PL/SQL: saiba quando e por que usar

As
triggers são programas armazenados que podem ser executados
automaticamente ou
podem ser disparados quando houver a ocorrência de algum
evento associado a elas.
Elas são, de fato, escritas para serem executadas em
resposta a algum dos
eventos expostos a seguir:

Com instruções DML -


Manipulação da base de dados com a utilização das
declarações DELETE, INSERT e UPDATE.
Com instruções DDL - Disponível
a partir da versão 8i do Oracle Database. É
mais utilizado em casos que
envolvam auditoria de alterações nos objetos de
um schema, assim como é o caso
das declarações CREATE, DROP e ALTER.
Com operações da base de
dados como LOGON, LOGOFF, STARTUP,
SERVERERROR, dentre outros.

As
triggers podem ser definidas em tabelas, views, schemas ou em alguma base
de
dados com a qual o evento seja associado.

Quais são os benefícios na utilização de triggers?

As triggers podem ser escritas para diferentes


propósitos, dos quais podemos
destacar a geração de valores derivados de
colunas da base de dados
automaticamente, auditoria, replicação sincronizada de
tabelas, prevenção de
transações inválidas, aplicação de integridade
referencial, imposição de
autorização de segurança, registro de eventos e
armazenamento de acesso as
tabelas da base de dados.

Como podemos criar uma trigger?


Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de
privacidade.
A
sintaxe para a estrutura básica de criação de uma trigger é apresentada na
Aceitar 19
Listagem 1.
https://www.devmedia.com.br/triggers-pl-sql-saiba-quando-e-por-que-usar/30011 2/11
15/08/2022 10:54 Triggers PL/SQL: saiba quando e por que usar

Listagem 1. Sintaxe básica de


criação da trigger PL/SQL.

1 CREATE [OR REPLACE ] TRIGGER trigger_name

2 {BEFORE | AFTER | INSTEAD OF }

3 {INSERT [OR] | UPDATE [OR] | DELETE}

4 [OF col_name]

5 ON table_name

6 [REFERENCING OLD AS o NEW AS n]

7 [FOR EACH ROW]

8 WHEN (condition)

9 DECLARE

10 Declaration-statements

11 BEGIN

12 Executable-statements

13 EXCEPTION

14 Exception-handling-statements

15 END;

Onde
temos:

CREATE [OR REPLACE] TRIGGER


trigger_name: cria uma nova trigger ou
sobrescreve uma já existente com o nome
informado, que no caso é
apresentado como trigger_name.
{BEFORE | AFTER | INSTEAD OF
}: aqui definimos quando a trigger deve ser
executada. A cláusula INSTEAD OF é
utilizada quando uma trigger é criada
em uma view.
{INSERT [OR] | UPDATE [OR] |
DELETE}: especifica a operação DML.
[OF col_name]: especificamos
aqui a coluna que deve ser atualizada.
ON table_name: aqui
especificamos o nome da tabela que será associada a
trigger.
[REFERENCING OLD AS o NEW AS
n]: neste ponto, permitimos a referência
a valores novos e valores antigos para
várias declarações DML, assim como
seriacookies
Utilizamos o casopara
para o insert
fornecer e o delete.
uma melhor experiência para nossos usuários, consulte nossa política de
privacidade.
[FOR EACH ROW]: esta instrução especifica uma
trigger no nível de linha.
Aceitar
Neste caso, a trigger deveria ser escutada para cada
linha afetada.
19

https://www.devmedia.com.br/triggers-pl-sql-saiba-quando-e-por-que-usar/30011 3/11
15/08/2022 10:54 Triggers PL/SQL: saiba quando e por que usar

WHEN (condição): este trecho


da instrução provê a condição para que a
trigger seja disparada nas linhas.
Esta cláusula só é válida para triggers em
nível de linha.

Vamos
criar um exemplo simples de utilização para melhorar nossas habilidades,
onde o
preço de um produto muda constantemente. Então existe aí a importância
de
manter um histórico dos preços desses produtos.
Então começaremos com a
criação das tabelas de nossa base, conforme a Listagem 2.

Listagem 2. Criação das tabelas


de ‘produtos’ e ‘historico_preco_produto’.

1 CREATE TABLE historico_preco_produto

2 (produto_id number(5),

3 produto_nome varchar2(50),

4 produto_descricao varchar2(150),

5 produto_preco_unitario number(7,2) );

7 CREATE TABLE produtos

8 (produto_id number(5),

9 produto_nome varchar2(32),

10 produto_descricao varchar2(150),

11 produto_preco_unitario number(7,2) );

Em
seguida, vamos popular estas tabelas com informações pertinentes, conforme
a Listagem 3.

Listagem 3. Populando as
tabelas

1 INSERT INTO produtos VALUES (1, 'leite', 'bebida nutritiva', '2.50')


2 INSERT INTO produtos VALUES (2, 'carne bovina', 'musculo', '10.00');
3 INSERT INTO produtos VALUES (3, 'ovos', 'item vendido por unidade',

4 '2.50');

5 INSERT INTO produtos VALUES (4, 'pão', '10 unidades', '3.50');

6 INSERT INTO produtos VALUES (5, 'laranja', 'fruta rica em

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de
7 vitamina C, quantidade minima 12 unidades', '5.00');

8 INSERT INTO produtos VALUESprivacidade.(6, 'feijão', 'Alimento rico em ferro',

9 '4.50');
Aceitar 19

https://www.devmedia.com.br/triggers-pl-sql-saiba-quando-e-por-que-usar/30011 4/11
15/08/2022 10:54 Triggers PL/SQL: saiba quando e por que usar

O
próximo ponto agora é criarmos a nossa trigger, conforme a Listagem 4.

Listagem 4. Criação da trigger

1 CREATE or REPLACE TRIGGER historico_preco_trigger

2 BEFORE UPDATE OF prd_preco_unitario

3 ON produtos

4 FOR EACH ROW

5 BEGIN

6 INSERT INTO historico_preco_produto

7 VALUES

8 (:old.produto_id,

9 :old.produto_nome,

10 :old.produto_descricao,

11 :old.produto_preco_unitario);

12 END;

13 /

Agora
que temos nossa tabela criada, populada com alguns registros e também
com a nossa
trigger pronta, vamos então realizar uma atualização em um dos
valores de
produtos que temos, conforme a Listagem
5.

Listagem 5. Atualização de
valores

1 UPDATE PRODUTOS SET produto_preco_unitario = 800

2 WHERE produto_id = 5;

Como
tivemos esta atualização em um dos itens de produtos na tabela produtos, a
nossa trigger foi disparada fazendo assim a atualização da tabela
‘historico_preco_produto’.

Tipos de Triggers PL/SQL


Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de
privacidade.
Existem
dois tipos de triggers baseados de acordo com o nível em que são
Aceitar 19
disparadas:
https://www.devmedia.com.br/triggers-pl-sql-saiba-quando-e-por-que-usar/30011 5/11
15/08/2022 10:54 Triggers PL/SQL: saiba quando e por que usar

Trigger em nível de linha: Esta


é a mais comum e é executada uma vez para
cada linha afetada pela SQL que a
disparou. Apenas neste nível é que as
triggers tem acesso aos valores de
registros afetados, sendo estes novos ou
antigos.
Trigger em nível de
declaração: É executada para cada declaração SQL que é
executada. Este tipo de
trigger não é muito utilizado.

Quando disparamos uma trigger, esta segue uma


hierarquia de ações da seguinte
forma:

1. [BEFORE]
- Antes da declaração da trigger ser disparada pela primeira vez.
2. [BEFORE]
- Após isso, antes da trigger disparar em nível de linha, uma vez
para cada
linha afetada.
3. [AFTER]
- Então, após a trigger ser disparada em nível de linha para cada
linha
afetada. Estes eventos alternarão entre antes e depois da trigger ser
disparada.
4. [AFTER]
- E por último, depois a declaração da trigger em nível dispara.

Para
facilitar o entendimento destas informações, vamos criar uma nova tabela
chamada ‘produto_mensagem’, onde nós poderemos usá-la para armazenar as
mensagens
quando as triggers forem disparadas.Observe a Listagem 6.

Listagem 6. Tabela
Produto_mensagem

1 CREATE TABLE produto_mensagem

2 (Mensagem varchar2(50),

3 Data_corrente number(32)

4 );

Agora
criaremos as declarações de BEFORE UPDATE para os níveis de declaração
e Utilizamos
de
linha.cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de
privacidade.

Aceitar 19

https://www.devmedia.com.br/triggers-pl-sql-saiba-quando-e-por-que-usar/30011 6/11
15/08/2022 10:54 Triggers PL/SQL: saiba quando e por que usar

A
declaração BEFORE UPDATE, nível de
declaração é uma trigger que irá inserir
um registro na tabela ‘produto_mensagem’
antes da instrução SQL para
atualização ser executada, em nível de declaração. Observe a Listagem
7.

Listagem 7. BEFORE
UPDATE

1 CREATE or REPLACE TRIGGER Before_Update_Stat_produto

2 BEFORE

3 UPDATE ON produtos

4 Begin

5 INSERT INTO produto_mensagem

6 Values('Before update, statement level',sysdate);

7 END;

8 /

Agora
a BEFORE UPDATE, nível de linha é
uma trigger que vai inserir um registro
na tabela ‘produto_mensagem’ antes de
cada linha ser atualizada. Observe
a
Listagem 8.

Listagem 8. BEFORE
UPDATE em nível de linha

1 CREATE or REPLACE TRIGGER Before_Upddate_Row_produto

2 BEFORE

3 UPDATE ON produtos

4 FOR EACH ROW

5 BEGIN

6 INSERT INTO produto_mensagem

7 Values('Before update row level',sysdate);

8 END;

9 /

A AFTER UPDATE em nível de declaração é a


trigger que irá inserir um novo
registro na tabela ‘checagem_produto’ depois
que a declaração SQL de atualização
for executada.
Utilizamos cookiesObserve a Listagem
9.
para fornecer uma melhor experiência para nossos usuários, consulte nossa política de
privacidade.
Listagem 9. AFTER UPDATE em
nível de declaração
Aceitar 19

https://www.devmedia.com.br/triggers-pl-sql-saiba-quando-e-por-que-usar/30011 7/11
15/08/2022 10:54 Triggers PL/SQL: saiba quando e por que usar

1 CREATE or REPLACE TRIGGER After_Update_Stat_produto

2 AFTER

3 UPDATE ON produtos

4 BEGIN

5 INSERT INTO produto_mensagem

6 Values('After update, statement level', sysdate);

7 End;

8 /

A AFTER UPDATE em nível de linha é a trigger


que irá inserir um registro na
tabela ‘produto_mensagem’ depois que cada linha
for atualizada. Observe a
Listagem 10.

Listagem 10. AFTER


UPDATE em nível de linha

1 CREATE or REPLACE TRIGGER After_Update_Row_produto

2 AFTER

3 insert On produtos

4 FOR EACH ROW

5 BEGIN

6 INSERT INTO produto_mensagem

7 Values('After update, Row level',sysdate);

8 END;

9 /

Agora
que temos tudo criado, vamos executar uma declaração de atualização na
nossa
tabela de produtos, conforme a Listagem
11.

Listagem 11. Atualização da


tabela produtos

1 UPDATE PRODUTOS SET produto_preco_unitario = 1200

2 WHERE produto_id in (3,5);

Algo
importante a se saber também com relação as triggers é que caso estas
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de
tenham
sido definidas de forma idêntica, elas serão executadas sem uma ordem
privacidade.

específica
(podendo ser de forma aleatória).
Aceitar Caso isto seja realmente
19
necessário,

https://www.devmedia.com.br/triggers-pl-sql-saiba-quando-e-por-que-usar/30011 8/11
15/08/2022 10:54 Triggers PL/SQL: saiba quando e por que usar

devemos
ter cuidado com a integridade do banco de dados para que não haja
dependência
com relação à ordem de execução das triggers.

Até a próxima!

Voltar Anotar Marcar como concluído

de: R$ 658,80
por: 12x
Em caso de dúvidas chame no whatsapp

PLANO PRO

Acesso completo
Projetos reais
Professores online
Exercícios gamificados
Certificado de autoridade

COMECE AGORA

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de
privacidade.

Aceitar 19

https://www.devmedia.com.br/triggers-pl-sql-saiba-quando-e-por-que-usar/30011 9/11
15/08/2022 10:54 Triggers PL/SQL: saiba quando e por que usar

Por
Edson
Em 2014

RECEBA NOSSAS NOVIDADES

Informe o seu e-mail

Receber Newsletter

Tecnologias

Exercicios

Artigos

Quem Somos

Fale conosco

Plano para Instituição de ensino

Assinatura para empresas

Assine agora
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de
privacidade.

Aceitar 19

https://www.devmedia.com.br/triggers-pl-sql-saiba-quando-e-por-que-usar/30011 10/11
15/08/2022 10:54 Triggers PL/SQL: saiba quando e por que usar

Hospedagem web por Porta 80 Web Hosting

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de
privacidade.

Aceitar 19

https://www.devmedia.com.br/triggers-pl-sql-saiba-quando-e-por-que-usar/30011 11/11

Você também pode gostar