DB2 - Triggers

Este capítulo descreve gatilhos, seus tipos, criação e eliminação dos gatilhos.

Introdução

Um gatilho é um conjunto de ações executadas para responder a uma operação INSERT, UPDATE ou DELETE em uma tabela especificada no banco de dados. Os gatilhos são armazenados no banco de dados de uma vez. Eles lidam com a governança de dados. Eles podem ser acessados ​​e compartilhados entre vários aplicativos. A vantagem de usar gatilhos é que, se alguma alteração precisar ser feita no aplicativo, ela será feita no gatilho; em vez de alterar cada aplicativo que está acessando o gatilho. Os gatilhos são fáceis de manter e reforçam o desenvolvimento de aplicativos mais rápido. Os gatilhos são definidos usando uma instrução SQL “CREATE TRIGGER”.

Tipos de gatilhos

Existem dois tipos de gatilhos:

1. BEFORE aciona

Eles são executados antes de qualquer operação SQL.

2. AFTER aciona

Eles são executados após qualquer operação SQL.

Criando um gatilho BEFORE

Vamos ver como criar uma sequência de gatilho:

Syntax:

db2 create sequence <seq_name>

Example: Criando uma sequência de gatilhos para a tabela shopper.sales1

db2 create sequence sales1_seq as int start with 1 increment by 1

Syntax:

db2 create trigger <trigger_name> no cascade before insert on 
<table_name> referencing new as <table_object> for each row set 
<table_object>.<col_name>=nextval for <sequence_name>

Example: Criando gatilho para a tabela shopper.sales1 para inserir números de chave primária automaticamente

db2 create trigger sales1_trigger no cascade before insert on 
shopper.sales1 referencing new as obj for each row set 
obj.id=nextval for sales1_seq

Agora tente inserir qualquer valor:

db2 insert into shopper.sales1(itemname, qty, price) 
values('bicks', 100, 24.00)

Recuperando valores da tabela

Vamos ver como recuperar valores de uma tabela:

Syntax:

db2 select * from <tablename>

Example:

db2 select * from shopper.sales1

Output:

ID       ITEMNAME       QTY 
-------  ------------   ---------- 
    3      bicks            100 
    2      bread            100 
  
  2 record(s) selected.

Criação de um gatilho AFTER

Vamos ver como criar um gatilho posterior:

Syntax:

db2 create trigger <trigger_name> no cascade before insert on 
<table_name> referencing new as <table_object> for each row set
 <table_object>.<col_name>=nextval for <sequence_name>

Example: [Para inserir e recuperar os valores]

db2 create trigger sales1_tri_after after insert on shopper.sales1 
for each row mode db2sql begin atomic update shopper.sales1 
set price=qty*price; end

Output:

//inseting values in shopper.sales1 
db2 insert into shopper.sales1(itemname,qty,price) 
values('chiken',100,124.00) 
//output 
ID    ITEMNAME       QTY         PRICE 
----- -------------- ----------- -----------                      
    3 bicks          100         2400.00 
    4 chiken         100         12400.00 
    2 bread          100         2400.00 

	3 record(s) selected.

Soltando um gatilho

Aqui está como um gatilho de banco de dados é eliminado:

Syntax:

db2 drop trigger <trigger_name>

Example:

db2 drop trigger slaes1_trigger