Está en la página 1de 22

Diseñado por: Ing. Dulfran A. Montaño M.

2 de septiembre de 2015

Items Descripción
Instructivo Técnico Utilización de Triggers en Base de
Datos
Fecha Creación Septiembre de 2015
Diseñado Por Dulfran A. Montaño M.
Categoría Base de Datos
Nivel Avanzado
Herramienta SQLSERVER

Introducción
Que es un Triggers: Los Triggers o Disparadores son objetos que se asocian con tablas
y se almacenan en la base de datos. Su nombre se deriva por el comportamiento que
presentan en su funcionamiento, ya que se ejecutan cuando sucede algún evento sobre
las tablas a las que se encuentra asociado. Los eventos que hacen que se ejecute un
trigger son las operaciones de inserción (INSERT), borrado (DELETE) o actualización
(UPDATE), ya que modifican los datos de una tabla.

La utilidad principal de un trigger es mejorar la administración de la base de datos, ya


que no requieren que un usuario los ejecute. Por lo tanto, son empleados para
implementar las REGLAS DE NEGOCIO (tipo especial de integridad) de una base de
datos.

Fuente: https://es.wikipedia.org/wiki/Trigger_(base_de_datos)

Teniendo en cuenta lo anteriormente mencionado entremos en materia, para la


realización de este instructivo utilizaremos las siguientes herramientas.

SQLSERVER(versión 2008 en adelante)


LENGUAJE SQL(referencia: www.1keydata.com)
UNA COMPUTADORA

Antes que todo tendremos en cuenta un breve repaso sobre el lenguaje SQL
instrucciones (INSERT, DELETE, UPDATE)

INSERT INTO "nombre_tabla" ("columna1", "columna2", “columna n”)


VALUES ("valor1", "valor2", “valor n”)

DELETE FROM "nombre_tabla"


WHERE "condición"

UPDATE "nombre_tabla"
SET "columna_1" = [nuevo valor]
WHERE "condición"

Las instrucciones SQL son secuencia de comandos ejecutados de manera lógica y


ordenada, el comando INSERT se utiliza paran agregar un nuevo registro en una
tabla de la base de datos, el comando DELETE se utiliza para eliminar un registro
en una tabla de la base de datos, el comando UPDATE se utiliza para modificar o
actualizar el valor de un registro entero o campos de una tabla de una base de
datos; teniendo en cuenta esto procedemos a trabajar con nuestros TRIGGERS.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Lo primero que haremos será crear una base de datos nueva en SQLSERVER, en
mi caso estoy utilizando la versión 2008.

Figura 1.

Damos clic derecho en la opción base de datos, como se ilustra en la Figura 1,


luego procedemos a colocarle un nombre a nuestra base de datos.

Figura 2.

Como podemos observar en la Figura 2, encontramos que el nombre de la base


de datos está acompañado de la palabra (bd) primero, esto se utiliza para tener
un estándar en el diseño de base de datos, luego procedemos a dar clic en el
botón Aceptar.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Figura 3.

Como podemos observar en la Figura 3, la base de datos ha sido creada, lo


próximo que haremos es crear las tablas que conformaran el diseño de la base de
datos; para crear una nueva tabla tendremos en cuenta los siguientes pasos.

Paso No 1. Ubicamos la base de datos, luego al lado del nombre de la base de


datos ubicamos un pequeño botón que tiene el símbolo (+) y procedemos a darle
clic.

Figura 4.

Como podemos observar en la Figura 4, se despliegan una serie de opciones,


para crear una tabla damos clic derecho en la opción tablas, nueva tabla.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Figura 5.

Como podemos observar en la Figura 5, ingresamos todos los campos que harán
parte de la tabla que vamos a crear asociándole el tipo de datos que esta
contendrá, y luego damos clic en la pestaña de la tabla y damos clic en guardar y
procedemos a colocarle el nombre a la tabla, como podemos observar en la
Figura 5, se utiliza tbl primero del nombre de la tabla, quedando por consiguiente
con el nombre (tblclientes), esto se utiliza para identificar la tabla, es un estándar
de diseño en base de datos, de esta manera procedemos a crear las demás
tablas, a continuación les asocio los campos y tablas que tendrá nuestro diseño.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

A continuación asocio el script para crear las tablas de la base de datos, que
encontraremos en el documento llamado script_bdsbancoadsi2015.pdf

Anexo modelo entidad relación de la base de datos, como se ilustra en la Figura


6.

Figura 6.

Luego de tener todos estos aspectos y nuestra base de datos creada, relacionada
y normalizada procedemos a crear el triggers.

Para entrar un poco en contexto, el ejercicio que estamos realizando es la


simulación de un sistema de banca virtual, donde un cliente tiene asociadas unas
cuentas bancarias, las cuales pueden realizar las siguientes operaciones.
(1.Consignacion 2.Retiro 3.Traslado), el cliente puede tener los siguientes tipos
de cuenta (1.Ahorro 2.Corriente 3.Credito), en este caso si observamos la Figura
6, con respecto a la normalización de la base de datos encontramos que un
cliente puede tener más de una cuenta, que esta a su vez puede tener asociado
un tipo de cuenta que puede ser (1.Ahorro 2.Corriente 3.Credito), en un segundo
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

grado podemos observar la tabla transferencias la cual está relacionada con la


tabla cuentas y la tabla tbltipomovimiento (1.Consignacion 2.Retiro 3.Traslado),
esto se hace con el fin de registrar las transacciones realizadas por los clientes y
que afectan las diferentes cuentas de acuerdo a lo solicitado por el usuario.

A continuación veremos cómo implementar el Triggers.

Lo primero que debemos tener en cuenta es que con los conceptos que
trabajamos anteriormente un triggers se ejecuta de acuerdo a unas condiciones,
estas son instrucciones que permiten disparar la función (INSERT, UPDATE,
DELETE), recordemos que los Triggers se ejecutan en las tablas teniendo en
cuenta las funciones mencionadas, si observamos un poco el diagrama entidad
relación expuesto anteriormente nos damos cuenta que en este caso la forma de
afectar el saldo de una cuenta asociada a un cliente es por medio de una
transferencia las cuales pueden ser las siguientes, (1.Consignacion 2.Retiro
3.Traslado), teniendo en cuenta esto, nuestro triggers debe ejecutarse en la tabla
transferencias debido a que cada vez que se realice una nueva transferencia
afectara la tabla de cuentas, las cuales están asociadas a un cliente en particular,
entonces procedemos a insertar el triggers.

Lo primero que debemos hacer es ubicar la tabla, en la cual colocaremos el


triggers en este caso hemos determinado que será la tabla (tbltransferencias).

Figura 7.

En la Figura 7 podemos observar que dando clic en el botón (+) que se encuentra
al lado de la tabla nos permite desplegar las opciones que podemos programar de
nuestra tabla.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Figura 8.

Como podemos observar en la Figura 8, escogemos la opción desencadenadores


damos clic derecho en la opción Nuevo Desencadenador.

Figura 9.

Como podemos observar en la Figura 9, en la parte derecha se crea una pestaña


que tiene asociado unas líneas de código que explicaremos a continuación.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Figura 10.

Como podemos observar en la Figura 10, seleccionamos las líneas que aparecen
en color verde, esto es porque estas líneas solo son comentarios asociados al
triggers, entonces procedemos a eliminarlos.

Figura 11.

En la Figura 11 observamos el resultado después de eliminar las líneas de


comentario.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

A continuación explicaremos la forma en la que está compuesto un triggers.

Figura 12.

En la Figura 12 se ilustra un segmento de código que se refiere a los datos de la


fecha y persona que realiza el triggers, esto es importante debido a que si
estamos trabajando en equipo de desarrollo, conocer la persona que elaboro
dichas líneas de código, en caso de una modificación podríamos tenerlo de
referencia.

Figura 13.

En la Figura 13 se ilustra el código que permite agregar el triggers en la base de


datos, la instrucción CREATE TRIGGER permite crear y agregar el triggers en la
tabla de la base de datos, al lado de este comando modificamos estas líneas para
colocar el nombre del triggers, en la línea donde encontramos el comando ON se
refiere a la base de datos donde se ejecutara o disparara el triggers y en la parte
que dice AFTER se refiere a la función que desencadenara el triggers después de
insertar un dato(INSERT), o eliminar un dato(DELETE), o actualizar un
dato(UPDATE) todo depende de las necesidades del desarrollador.

Figura 14.

Como podemos observar en la Figura 14, como queda nuestro codigo después de
realizar las respectivas modificaciones, en este caso nuestro triggers se llama
(nueva_transferencia), la tabla en la cual se desencadenara el triggers es la tabla
(tbltransferencias), y se ejecutara cada vez que detecte una nueva inserción
(INSERT) en la tabla asociada.

Figura 15.

En la Figura 15, podemos observar el lugar donde ubicaremos las variables que
obtendrán los valores para realizar la operación del triggers a continuación
veremos este proceso.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Figura 16.

Como observamos en la Figura 16 hemos declarado en nuestro triggers las


variables locales que recibirán los datos de la tabla transferencia para después
afectar los datos de la tabla cuenta, estas variables recibirán de las consultas SQL
los datos.

Figura 17.

Como podemos observar en la Figura 17, este segmento de código nos permite
recibir los valores de las consultas SQL realizadas en este caso por ejemplo
encontramos el segmento que dice:

Select @n_cuenta_or = n_cuenta_orig from inserted

Este segmento de código lo que hace es que recupera el valor insertado en la


tabla que afecta el triggers (tbltransferencias), lo cual me devuelve el valor
insertado en el campo n_cuenta_orig que se refiere a la cuenta origen de la
transferencia.

Para el caso puntual del segmento:

Select @saldo_cuenta = saldo from tblcuentas where n_cuenta = @n_cuenta_or

En este caso en particular estamos realizando una consulta a la tabla (tblcuentas)


con restricción en where que solo nos devuelva el valor del saldo de la cuenta
origen, el cual tenemos capturado en el parámetro o variable local @n_cuenta_or
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Figura 18.

En la Figura 18 se ilustra el segmento de código que permite realizar la operación


o tipo de movimiento 1 que se refiere a una consignación, como podemos
observar los primero que hacemos es en la variable o parámetro @nuevo_saldo
es calcular el saldo que tendrá la cuenta después de realizar la transferencias. En
la variable o parámetro @monto_trans contiene el valor que se va a transferir a
la cuenta, y luego la operación de suma que indica que a la variable
@nuevo_saldo se le suma @saldo_cuenta que contiene el saldo actual de la
cuenta que se consultó en el pantallazo anterior, y luego se le suma el valor de la
variable o parámetro @monto_trans que contiene el valor a transferir, como se
muestra en el siguiente segmento de código.

select @nuevo_saldo = @saldo_cuenta + @monto_trans

Figura 19.

En la Figura 19 se ilustra el segmento de código que permite realizar la operación


o tipo de movimiento 2 que se refiere a un retiro, esta es igual a la anterior con la
diferencia que el monto a transferir se resta y no se suma como en el caso
anterior, como se ilustra en el siguiente segmento de código.

select @nuevo_saldo = @saldo_cuenta - @monto_trans


Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

if(@tipo_mov = 3)
begin
--restar cuenta origen
select @nuevo_saldo = @saldo_cuenta - @monto_trans
update tblcuentas
set saldo = @nuevo_saldo
where
n_cuenta = @n_cuenta_or
--sumar cuenta destino
declare @saldo_destino money
select @saldo_destino = saldo
from tblcuentas
where
n_cuenta = @n_cuenta_dest
declare @nuevo_saldodest money
select @nuevo_saldodest = @saldo_destino
+ @monto_trans
update tblcuentas
set saldo = @nuevo_saldodest
where
n_cuenta = @n_cuenta_dest
end

En este segmento de código estamos realizando la operación 3 que se refiere a


un traslado de una cuenta a otra, como podemos darnos cuenta existen dos fases
del proceso una que es restar de la cuenta origen el monto que se va a trasladar,
y actualizarlo a la cuenta de la cual sale el dinero, (cuanta origen), luego sumarle
a la cuenta destino el valor del monto a transferir, veamos el código explicado
con más detalle.

--restar cuenta origen


select @nuevo_saldo = @saldo_cuenta - @monto_trans
update tblcuentas
set saldo = @nuevo_saldo
where
n_cuenta = @n_cuenta_or
Este segmento de código se encarga de restar de la cuenta origen el valor del
monto a transferir, si nos damos cuenta con respecto a la cláusula where la
condición es que solo reste el dinero de la cuenta origen que esta referenciada en
la variable @n_cuenta_or que ya habíamos mencionado anteriormente, para que
solo reste el valor a la cuenta en la que se está realizando la transferencia.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

--sumar cuenta destino


declare @saldo_destino money
select @saldo_destino = saldo
from tblcuentas
where
n_cuenta = @n_cuenta_dest
declare @nuevo_saldodest money
select @nuevo_saldodest = @saldo_destino
+ @monto_trans
update tblcuentas
set saldo = @nuevo_saldodest
where
n_cuenta = @n_cuenta_dest
end

En este segmento de código explicamos el proceso de sumar, el valor del monto


que se está trasladando de la cuenta origen, primero se debe consultar el valor
actual del monto de la cuenta, que se realiza en las siguientes líneas de código.

select @saldo_destino = saldo


from tblcuentas
where
n_cuenta = @n_cuenta_dest
En este caso le estamos diciendo que nos devuelva el saldo que tiene la cuenta
destino, para poder luego determinar el valor que tendrá al finalizar la
transferencia.

select @nuevo_saldodest = @saldo_destino +


@monto_trans

En este segmento de código estamos realizando la suma del saldo que tiene la
cuenta destino con el monto que se está transfiriendo.

update tblcuentas
set saldo = @nuevo_saldodest
where
n_cuenta = @n_cuenta_dest
end
En este segmento de código estamos realizando la actualización del valor anterior
que tenía la cuenta destino con el nuevo valor después de la transferencia
realizada.

Por ultimo lo que nos resta hacer es ejecutar el triggers para que quede
almacenado en el servidor.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Figura 20.

En la Figura 20 se ilustra la forma en la que se ejecuta el triggers, ubicamos un


botón de color rojo que tiene un símbolo de admiración como se ilustra en la
Figura 21.

Figura 21.

Figura 22.

En la Figura 22 se ilustra el resultado después de ejecutar el triggers, nos envía


un mensaje que dice “comandos completados correctamente”, lo que nos indica
que las líneas de código no tienen ningún error.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Figura 23.

En la Figura 23 podemos observar el resultado después de ejecutar el triggers, ya


la tabla tbltransferencias tiene relacionado el triggers que construimos, ahora
procedemos a ejecutar una inserción para verificar el correcto funcionamiento de
nuestro código.

Antes de realizar esto, primero debemos verificar que datos tenemos agregados
en nuestras tablas y si no los tenemos los agregamos.

Verificamos la tabla tblclientes.

Figura 24.

En la Figura 24 podemos observar el resultado de la consulta de datos, de esta


manera también podemos agregar nuevos datos en la tabla, cabe destacar que
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

este caso lo estamos haciendo utilizando el diseño de las tablas ósea el asistente
visual pero también lo podemos hacer utilizando comandos SQL.

Verificamos la tabla tblcuentas, que contiene las tablas inscritas de los clientes y
que les pertenecen a estos.

Figura 25.

En la Figura 25 podemos observar el resultado de la consulta de la tabla


tblcuentas, nos damos cuenta que pide los valores de (n_cuenta, id_cliente,
id_tipocuenta), los campos id_cliente y id_tipocuenta son campos relacionados a
la tabla tblcuentas, a los que nos referimos en el modelo entidad – relación
anteriormente visto, en el campo id_cliente se encuentra el valor del dato que
tiene asociado el cliente y en el campo id_tipocuenta el valor asociado a que tipo
de cuenta tiene el cliente; hagamos una vista comparativa de la tabla clientes con
la tabla cuentas para entender mucho mejor esto.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Podemos encontrar la relación entre cada uno de ellos, si miramos más


detalladamente podemos dar cuenta que la persona registrada con el id
(72297371), tiene registrada dos números de cuenta (752-95632-85 y 851-
25698-74), y que la persona con el id 1028003152 tiene registrada una cuenta
con el número (852-96389-15).

Verificamos la tabla tbltipocuenta.

Verificamos la tabla tbltipomovimiento

Verificamos la tabla tbltransferencias, y nos damos cuenta que no tiene


registrada ninguna transferencia esto debido a que aún no hemos realizado las
pruebas, ya que primero se debe verificar las tablas que hacen parte de la
relación y después la tabla principal que en este caso es la tabla tbltransferencias
donde tenemos nuestro triggers, como se ilustra en la Figura 26.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Figura 26.

A continuación lo que haremos es ejecutar una inserción en la tabla transferencia


para verificar el buen funcionamiento de nuestro triggers.

Podemos hacerlo de dos maneras.

1. Utilizando comandos SQL


2. Utilizando la vista de tablas

En nuestro caso lo haremos de las dos maneras.

Manera No 1.

Figura 27.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

En la Figura 27 podemos observar que estamos realizando una transacción tipo


de movimiento 3 lo que quiere decir que es un traslado, entonces viéndolo de
forma más detallada como se ilustra en la Figura 28.

Figura 28.

En la Figura 28 observamos que la cuenta 752-95632-85 va a transferir el valor


de $250000 a la cuenta 852-96389-15 la cual pertenece a otro cliente, sabemos
que es un traslado de saldo ya que el id_tipomovimiento tiene un 3 como valor lo
que nos corrobora que es un traslado, procedemos a darle Enter luego de colocar
la fecha, el número de transferencia esta con valor (NULL), debido a que es un
campo (auto numérico) o (auto incremental), lo que indica que la base de datos
se encarga de generarlo.

Figura 29.

En la Figura 29 podemos observar el resultado de la operación o transacción en


este caso vemos que coloco un 1 en el campo id_trans ya que como explicamos
anteriormente es auto numérico y la base de datos se encarga de generarlo. El
siguiente paso es verificar en la tabla cuentas cual es el saldo anterior y el nuevo
saldo que tiene.

Figura 30.

La Figura 30 nos ilustra el estado de la cuenta 825-96389-15 que tiene un saldo


de $3500.000, pero si refrescamos la tabla utilizando el botón ejecutar de color
rojo que está ubicado en la parte superior veremos el resultado de la operación,
en este caso la cuenta tiene un saldo de $3500.000 y la transferencia fue por
$250.000 lo que implica que el nuevo saldo de la cuenta debe ser $3.750.000,
como se ilustra en la Figura 31.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Figura 31.

Como podemos darnos cuenta en la Figura 31 vemos el saldo de la cuenta 825-


96389-15 que ha agregado $250.000 que se transfirieron a la misma.

Manera No 2.

Utilizaremos comandos SQL para realizar la inserción de la nueva transferencia.

Figura 32.

Lo primero que debemos hacer es crear una nueva consulta a la base de datos
que queremos afectar como se ilustra en la Figura 32, y como podemos darnos
cuenta nos genera una pestaña para realizar la codificación de la consulta SQL.
Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Antes de ejecutar la secuencia de códigos SQL, verificamos el saldo de las


cuentas la cuenta origen 752-95632-85 tiene $10750000 de saldo y la cuenta
destino 852-96389-15 tiene $3750000 de saldo, la transferencia a realizar es la
misma que la anterior con la diferencia que esta se realizara utilizado códigos
SQL.

Figura 33.

En la Figura 33 luego de darle clic en el botón ejecutar de la parte superior nos


damos cuenta que nos dice que hay una fila afectada, lo que quiere decir que se
ejecutó de manera correcta el comando SQL, procedemos entonces a verificar el
valor contenidos en las tablas tbltransferencias y tblcuentas.

Figura 34.

Después de dar clic en el botón rojo de ejecutar en la parte superior, se refrescan


los valores de la tabla tbltransferencias como se ilustra en la Figura 34, nos
damos cuenta que ha agregado el nuevo registro de la transferencia cuenta
origen 752-95632-85 cuenta destino 852-96389-15 y el valor de la transferencia
fue por $100000.

Ahora procedemos a verificar los saldos de las cuentas.


Diseñado por: Ing. Dulfran A. Montaño M.
2 de septiembre de 2015

Antes de la Transferencia

Después de la Transferencia

El resultado que observamos es que la cuenta origen tuvo un descuento de


$100000 debido al traslado de dinero y que la cuenta destino tuvo un incremento
en su saldo de $100000.

Espero que este instructivo sea de mucha ayuda para todos ustedes, y recuerden
la siguiente frase: “si buscas resultados diferentes, no hagas siempre lo mismo”,
Albert Einstein

Felices códigos

Documentador Cargo y Centro Fecha Elaboración

Dulfran A. Montaño M. Instructor - Complejo Tecnológico Septiembre 02/2015


Agroindustrial Pecuario y Turístico
DATOS INSTRUCTOR

DULFRAN A. MONTAÑO M.

Información de Contacto:

Correo: ing_dmontano@misena.edu.co

Skype: ing_dmontano

Cel. 300 464 03 98 & Whatsapp

También podría gustarte