DB2 - Activadores

Este capítulo describe los disparadores, sus tipos, la creación y eliminación de disparadores.

Introducción

Un desencadenante es un conjunto de acciones, que se realizan para responder a una operación INSERT, UPDATE o DELETE en una tabla especificada en la base de datos. Los disparadores se almacenan en la base de datos a la vez. Manejan la gobernanza de los datos. Se puede acceder a ellos y compartirlos entre múltiples aplicaciones. La ventaja de utilizar disparadores es que, si es necesario realizar algún cambio en la aplicación, se realiza en el disparador; en lugar de cambiar cada aplicación que accede al disparador. Los activadores son fáciles de mantener y refuerzan el desarrollo de aplicaciones más rápido. Los disparadores se definen mediante una sentencia SQL "CREATE TRIGGER".

Tipos de desencadenantes

Hay dos tipos de desencadenantes:

1. ANTES de los disparadores

Se ejecutan antes que cualquier operación SQL.

2. DESPUÉS de los disparadores

Se ejecutan después de cualquier operación SQL.

Crear un activador ANTES

Veamos cómo crear una secuencia de disparadores:

Syntax:

db2 create sequence <seq_name>

Example: Creación de una secuencia de activadores para la mesa 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: Creación de un activador para la tabla shopper.sales1 para insertar números de clave primaria automáticamente

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

Ahora intente insertar cualquier valor:

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

Recuperando valores de la tabla

Veamos cómo recuperar valores de una tabla:

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.

Crear un disparador AFTER

Veamos cómo crear un disparador 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 insertar y recuperar los 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 un gatillo

Así es como se elimina un activador de base de datos:

Syntax:

db2 drop trigger <trigger_name>

Example:

db2 drop trigger slaes1_trigger