Professional Documents
Culture Documents
ENCICLOPEDIA CONOCIENDO
TOMO XLII
CUADERNO DE
TRIGGERS
ELABORADO POR:
CONTIENE
RESUMEN DE SUS CLASES,
AMPLIACIN DE
EXPLICACIONES,
EJERCICIOS RESUELTOS
DE TRIGGERS Y ALGO
MS.
AGOSTO DE 2003.
1.1. DEFINICIN
Los triggers son procedimientos almacenados que se disparan cuando se presenta una
accin sobre una tabla, como una insercin, una actualizacin o un borrado de registros. En
la definicin del trigger, se especifica que acciones desencadenan la ejecucin del trigger.
Una de las cosas mas interesantes a tener en cuenta en los triggers, es que los triggers se
asocian con una tabla y al eliminarse la tabla a la que se relaciona dicho trigger, se elimina
el trigger. Al reves no ocurre, es decir cuando se elimina un trigger no se elimina la tabla a
la que hace relacion el trigger. Esta cuestion es una cosa bastante interesante. Explicamos
esto mediante el siguiente ejercicio:
El problema comienza cuando borramos primero la tabla usuario y luego intentamos borrar
el trigger llamado trigger_asociado, es decir cuando intentamos ejecutar las sentencias en
el siguiente orden:
Cannot drop the trigger 'trigger_asociado', because it does not exist in the system catalog.
En el cual podemos apreciar que si eliminamos la tabla, se eliminan con ella los triggers
asociados.
Observamos que se producen errores, con lo cual para ejecutar dicho script, se requiere
ejecutarlo por partes, es decir:
Tabla: Continente
Id nombre
--- ---
on CONTINENTE
for insert as
print "Insertando en tabla CONTINENTE"
Tabla: Continente
Id nombre
1 AFRICA
2 EUROPA
3 HACIA
4 AMERICA
5 OCEANIA
(0 filas afectadas)
queremos que cada vez que se intente realizar una actualizacin se muestre un mensaje.
Para lograr esto, es necesario crear un trigger similar al siguiente:
on CONTINENTE
for update as
print "Actualizando CONTINENTE"
De tal suerte que cuando se intenta realizar la actualizacin sobre el continente HACIA
tal como se muestra a continuacin:
update CONTINENTE
set nombre = 'ASIA'
where id = 3
Actualizando CONTINENTE
(1 filas afectadas)
Tabla: Continente
Id nombre
1 AFRICA
2 EUROPA
3 ASIA
4 AMERICA
5 OCEANIA
6 RUSIA
Queremos que cada vez que el se intente eliminar un registro de la tabla CONTINENTE,
se despliegue un mensaje que muestre el registro borrado(el cual se encuentra en la tabla
deleted), despus se muestre la tabla CONTINENTE en la cual se pueda apreciar que
ya se ha realizado el borrado de dicho registro. Por ltimo, que se deshaga la operacin de
borrado y se vuelva a mostrar la tabla CONTINENTE para verificar que efectivamente se
deshizo la operacin. Veamos pues el trigger:
delete
from CONTINENTE
where id = 1
(1 filas afectadas)
id nombre
2 EUROPA
3 HACIA
4 AMERICA
5 OCEANIA
6 RUSIA
(5 filas afectadas)
Se deshizo la eliminacin
id nombre
1 AFRICA
2 EUROPA
3 HACIA
4 AMERICA
5 OCEANIA
6 RUSIA
(6 filas afectadas)
La tabla inserted es una tabla temporal que se crea cuando se insertan datos. Para el
ejercicio siguiente se parte de la tabla continente cuyos datos son:
Tabla: Continente
Id nombre
1 AFRICA
2 EUROPA
3 ASIA
4 AMERICA
5 OCEANIA
6 RUSIA
Queremos que se cada vez que se vaya a realizar una insercin, se le muestre al usuario los
datos que se van a insertar y posteriormente se muestra la tabla CONTINENTE con los
datos insertados. Para lograr esto, es necesario crear un trigger de insercin similar al
siguiente:
id nombre
7 AMERICA DEL SUR
(1 filas afectadas)
id nombre
1 AFRICA
2 EUROPA
3 HACIA
4 AMERICA
5 OCEANIA
6 RUSIA
7 AMERICA DEL SUR
(7 filas afectadas)
Observemos que para mostrar los datos a insertar, simplemente basta con hacer una
consulta sobre la tabla inserted, pues como se ha mencionado en este apartado, dicha
tabla, contiene los registros que se van a insertar. Posteriormente al hacer la consulta sobre
la tabla CONTINENTE, se muestra dicha tabla con el registro insertado, puesto que
dicha tabla fue actualizada con la sentencia ejecutada por el usuario.
Tabla: Continente
Id nombre
1 AFRICA
2 EUROPA
3 ASIA
4 AMERICA
5 OCEANIA
6 RUSIA
Para comprobar que este trigger realiza el trabajo deseado, sencillamente ejecutemos la
siguiente instruccin:
(6 filas afectadas)
Para comprender este ejercicio es necesario tener en cuenta que cuando se va a realizar la
insercin, se crea una tabla temporal denominada inserted, la cual tiene los siguientes
datos:
Tabla: inserted
id nombre
7 AMERICA
Tambin es bueno tener en cuenta que los datos ya han sido insertados y por tanto al
ejecutar la sentencia siguiente en el trigger:
Obtendremos el resultado:
id nombre
1 AFRICA
2 EUROPA
3 HACIA
4 AMERICA
5 OCEANA
6 RUSIA
7 AMERICA
Con lo cual podemos observar que aparece dos veces el nombre de continente
AMERICA, por tanto el trigger debe mostrar los campos de la tabla CONTINENTE
que tengan en su parte nombre el valor AMERICA y dicho valor AMERICA, es
posible obtenerlo de la tabla inserted. Por tanto la pregunta que se debe realizar es:
if (select count(*)
from CONTINENTE, inserted
where CONTINENTE.nombre like inserted.nombre)=2
rollback transaction
El orden en que se ejecutan las sentencias cuando existen trigger asociados a un tipo de
consulta es el siguiente:
Id nombre planeta
1 AFRICA TIERRA
2 EUROPA TIERRA
3 ASIA TIERRA
4 OCEANIA TIERRA
5 RUSIA TIERRA
Queremos impedir que se inserten planetas que no estn incluidos en la tabla y al mismo
tiempo impedir que se inserten nombres de continentes que ya existan previamente. Es
decir que existen dos condiciones:
Condicin 1
Impedir que se inserten planetas no incluidos en la tabla CONTINENTE
Condicin 2
Impedir que se inserten nombres de continentes existentes.
Condicin 1: Condicin 2
Impedir que se inserten planetas no Impedir que se inserten nombres de
incluidos en la tabla CONTINENTE continentes existentes.
select count(*) select count(*)
from CONTINENTE, inserted from CONTINENTE, inserted
where CONTINENTE.planeta like where CONTINENTE.nombre like
inserted.planeta )=1 inserted.nombre)=2
Explicacin: Cuando se inserta uno que no Explicacin: Cuando se inserta uno que ya
existe, quiere decir que est en la tabla una existe, est en realidad dos veces
sola vez
Con todas las explicaciones anteriores, podemos decir que el trigger que realiza el trabajo
deseado es algo similar al siguiente:
((select count(*)
from CONTINENTE, inserted
where CONTINENTE.nombre like inserted.nombre)=2 AND
(select count(*)
from CONTINENTE, inserted
where CONTINENTE.planeta like inserted.planeta )=1)
begin
Sentencia 1
insert into CONTINENTE values('AMERICA DEL NORTE', 'TIERRA') -- BIEN
(1 filas afectadas)
Sentencia 2
insert into CONTINENTE values('AMERICA DEL NORTE', 'TIERRA1') -- MAL
id nombre planeta
7 AMERICA DEL NORTE TIERRA1
(1 filas afectadas)
(6 filas afectadas)
Sentencia 3
insert into CONTINENTE values('AMERICA DEL NORTE', 'TIERRA') -- MAL
id nombre planeta
8 AMERICA DEL NORTE TIERRA
(1 filas afectadas)
id nombre planeta
1 AFRICA TIERRA
2 EUROPA TIERRA
3 ASIA TIERRA
4 OCEANIA TIERRA
5 RUSIA TIERRA
6 AMERICA DEL NORTE TIERRA
(6 filas afectadas)
Sentencia 4
id nombre planeta
9 AMERICA DEL SUR JUPITER
(1 filas afectadas)
id nombre planeta
1 AFRICA TIERRA
2 EUROPA TIERRA
3 ASIA TIERRA
4 OCEANIA TIERRA
5 RUSIA TIERRA
6 AMERICA DEL NORTE TIERRA
(6 filas afectadas)
Sentencia 5
(1 filas afectadas)
Es importante comprender que los triggers de actualizacin son una de las cosas mas
interesantes en cuanto a triggers se refiere, por cuanto a diferencia de los triggers de
insercin, no solamente crean una tabla inserted, sino que tambin crean una tabla
deleted, en la cual copian los datos que estaban antes de la actualizacin.
Conceptualmente el siguiente diagrama muestra el orden en el que el motor de bases de
datos SQL Server ejecuta las instrucciones cuando existen triggers de actualizacin:
Ejecuta la consulta de
actualizacion Copia los datos que estan en
el registro que se actualizara
en la tabla inserted
Ejecuta la consulta de
actualizacion
Ejecuta el trigger de
actualizacion
FIN
Enciclopedia Conociendo Cuaderno de Triggers
Autor: Luis Felipe Wanumen Silva 22
A primera vista, el ttulo de este apartado suena un poco confuso, pero en realidad se refiere
a la siguiente pregunta: Se actualiz un valor para una columna en una sentencia de
actualizacin?
Id nombre planeta
1 AFRICA TIERRA
2 EUROPA TIERRA
3 ASIA TIERRA
4 OCEANIA TIERRA
5 RUSIA TIERRA
6 AMERICA CENTRAL TIERRA
Ahora bien, para poder entender completamente el trigger, es necesario aclarar que la
sentencia:
IF UPDATE(planeta)
update CONTINENTE
set nombre = 'AMERICA'
where id = 6
(1 filas afectadas)
Id nombre planeta
1 AFRICA TIERRA
2 EUROPA TIERRA
3 ASIA TIERRA
4 OCEANIA TIERRA
5 RUSIA TIERRA
6 AMERICA TIERRA
Lo que indica que solamente se actualiz la tabla, pero no se mostr el mensaje, debido a
que en la sentencia de actualizacin no estaba presente el campo planeta. Ahora bien, la
siguiente sentencia:
update CONTINENTE
set nombre = 'AMERICA',
planeta = 'TIERRA'
where id = 6
Id nombre planeta
1 AFRICA TIERRA
2 EUROPA TIERRA
3 ASIA TIERRA
4 OCEANIA TIERRA
5 RUSIA TIERRA
6 AMERICA CENTRAL TIERRA
Lo que quiere decir que a pesar de haber actualizado el campo planeta con el mismo
valor que tena TIERRA, de todas formas, el hecho de haberlo incluido en la sentencia de
actualizacin, de pie para que SQL Server lo tome como un campo modificado.
Para los estudiantes / lectores que deseen utilizar funciones propias de SQL Server, se les
sugiere que utilice la funcin:
IF COLUMNS_UPDATED()
Para ver que con esta funcin se logra el mismo efecto que con
IF UPDATE(planeta)
Id nombre planeta
1 AFRICA TIERRA
2 EUROPA TIERRA
3 ASIA TIERRA
4 OCEANIA TIERRA
5 RUSIA TIERRA
6 AMERICA CENTRAL TIERRA
Sentencias Resultados
update CONTINENTE Se dehizo la operacin
set nombre = 'AMERICA'
where id = 6
update CONTINENTE Se dehizo la operacin
set nombre = 'AMERICA',
planeta = 'TIERRA'
where id = 6
update CONTINENTE La columna PLANETA fue actualizada
set planeta = 'TIERRA' Se dehizo la operacin
where id = 6
Creamos el trigger:
Ejecutamos la consulta:
Esto nos deja bien en claro que la tabla inserted en este tipo de triggers tiene los datos
que se van a insertar, que la tabla deleted contiene los datos que se van a eliminar y que
la tabla usuario al interior del trigger tiene los datos actualizados, es decir que primero se
ejecuta la consulta de actualizacin y luego el trigger de actualizacin.
En este segundo ejercicio se pretende hacer un trigger que impida que se actualice un
usuario con un cdigo distinto al que tenia este.
Creamos el trigger:
Ejecutamos la consulta:
update usuario
set codigo=7,
nombre='Luis Felipe Silva'
where codigo=3
Con lo cual vemos que los datos siguen siendo los mismos. Es decir que nuestro trigger de
actualizacin propuesto funciona para el caso en el que se desee actualizar un registro con
el cdigo igual al que se tenia.
update usuario
set edad=3,
nombre='Natalia Paris'
where codigo=3
La respuesta es que la consulta funciona y los datos de la tabla serian como los mostrados a
continuacin:
4 Sofia Cabrales 30
5 Cristina Aguilera 30
Creamos el trigger:
Antes de probar verificamos que tengamos los siguientes datos en la tabla usuario:
update usuario
set codigo = 20,
nombre = 'Luis Felipe'
where codigo=2
Con lo cual verificamos que los datos ahora son los siguientes:
Esto quiere decir que esta consulta funcion porque esta modificando un nombre Ana Sofia
Vergara por otro nombre que no existe Luis Felipe. Bueno, es probable que el amigo
lector diga que si existe otro Luis Felipe, pero lo unico cierto es que este primero se llama
Luis Felipe Silva, en tanto que el que se quiere modificar le falta el Silva, recuerde que
como no se usan caracteres comodin la palabra tiene que ser exacta. Pero sin mas rodeos
hagamos esta otra consulta de actualizacion:
update usuario
set codigo = 20,
nombre = 'Luis Felipe'
where codigo=4
Es decir que los datos no se pudieron cambiar debido a que se deseaba que la persona con
el cdigo 4 quedara con el mismo nombre de la persona que actualmente tenia el cdigo 20
y este tipo de cosas dijimos que era precisamente las que el trigger iba a impedir que se
realizaran.
El siguiente trigger lo que busca es contar cuantos estudiantes se han ingresado que
contengan el mismo numero de codigo en la tabla estudiante que el que se esta
ingresando y este valor lo coloca en una tabla llamada copia que contiene las mismas
columnas que la tabla estudiante mas una columna adicional llamada numero_registros
que contiene el numero de registros que existen con este codigo en la tabla estudiante.
Esto es bastante util como por ejemplo para hacer una auditoria de cuantos registros existen
de cada codigo en la tabla estudiante y tener una informacin actualizada en todo
momento de este numero en la tabla copia.
begin
set @codigin = (select codigo from inserted)
set @nombrecin= (select nombre from inserted)
set @salarin = (select salario from inserted)
if @existe_en_copia=1
insert into copia values(@codigin,@nombrecin,@salarin,1)
else
update copia set numero_registros = @existe_en_copia where codigo = @codigin
end
Observe amigo lector / estudiante que el trigger actua sobre la tabla estudiante y solo para
las operaciones de insercin en mencionada tabla. De otra parte es bueno notar que los
datos que inicialmente son ingresados en la tabla estudiante (Recuerde que primero se
ejecuta la insercin y luego el trigger de insercion) son almacenados en tres variables
declaradas globalmente que son:
Las cuales son inicializadas al interior del trigger con los valores que se acaban de insertar
en la tabla estudiante. De otra manera es bueno notar que se cuentan los registros que
existen en la tabla estudiante que tienen el mismo codigo del que se acaba de ingresar
(recuerde que se incluye el que se acabo de ingresar), por esta razon es que si no existe
dicho registro en la tabla la variabla @existe_en_copia vale 1 si el registro no existia,
porque quiere decir que fue el que se acabo de ingresar y como no existia en total existe una
sola vez(pues se acaba de ingresar). En el caso que no exista se debe hacer una insercin en
la tabla copia con el valor de 1 en el campo numero_registros, pero si ya existia, con
seguridad ya habia un registro en la tabla copia (esto se presupone porque se parte del
supuesto que el programador ha creado al trigger antes de hacer incluso la primera
insercin en la tabla estdudiante). En este ultimo caso, la variable @existe_en_copia
contiene el numero de veces que existe este registro en la tabla estudiante, con lo cual
este valor sirve para hacer la actualizacion en la tabla copia.
Ahora bien, para lograr comprender el mecanismo de funcionamiento del trigger, se hacen
unos ejemplos en los cuales se usa
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
En el cual se puede observer que se han hecho 6 operaciones. Dichas operaciones son de
insercin y corresponden a tres inserciones en la tabla estudiante y tres inserciones en la
tabla copia. Al finalizar la ejecucin de las consultas y de los triggers asociados con
dichas consultas las tablas contienen los siguientes datos:
Tabla estudiante:
Codigo nombre Salario
1 Hugo 98
2 Paco 98
3 Luis 98
Tabla copia:
codigo nombre salario numero_registros
1 Hugo 98 1
2 Paco 98 1
3 Luis 98 1
En el anterior trigger se puede apreciar que el numero de registros que aparece en ambas
tablas es igual y esto es debido a que los datos insertados en la tabla estudiante eran datos
de estudiantes con codigos que no existian. A continuacin vamos a realizar otras
inserciones para probar el funcionamiento del trigger anteriormente elaborado. Para ello,
hacemos las siguientes inserciones:
Despus de lo cual vemos que ahora los resultados no son iguales en ambas tablas, por
cuanto las tablas tienen los siguientes datos ahora:
Las siguientes observaciones se hacen con el fin de explicar detalladamente los resultados
anteriores.
ya existia este codigo en la tabla estudiante y por esto se actualiza el registro en la tabla
copia con lo cual queda en la tabla copia:
codigo nombre salario numero_registros
1 Hugo 98 2
estudiante que el campo nombre no es actualizado en la tabla copia y por tanto el registro
en la tabla copia queda asi:
Y dado que habia un registro inicialmente en la tabla estudiante que no ha sido afectado
por ninguna insercin u actualizacion en la tabla copia, es bien claro que los registros que
deben existir al final de las inserciones en la tabla copia deben ser:
Con el animo de afianzar los conocimientos adquiridos hasta el momento sobre triggers, se
proponen los siguientes triggers para que el amigo lector / estudiante realice a fin de
comprender bien el tema de triggers de insercin y de actualizacion.
1. Hacer un trigger que impida que se inserten estudiantes que tengan el mismo nombre
3. Hacer un trigger que impida que se inserte un estudiante con slario mayor a 900
4. Hacer un trigger que impida que se inserte un estudiante con codigo impar
5. Hacer un trigger que impida que se elimine un estudiante que este en la base de datos tres
veces, pero si esta una, dos o mas de tres veces si lo deje eliminar.
6. Hacer un trigger que impida que se actualice el nombre de un estudiante, pero si desea
actualizar el codigo o el salario o ambos si lo deje actualizar
En este ejemplo se pretende hacer un trigger que cuando el usuario intente hacer una
actualizacion sobre la tabla estudiante, se permita hacer dicha actualizacin si el nombre del
estudiante por el que se desea actualizar es un nombre que no se encuentra en la lista de
estudiantes. En el caso que se desee actualizar el nombre de los estudiantes por uno nombre
cuyo contenido ya exista, no se debe permitir dicha actualizacion.
Se propone al amigo lector / estudiante mejorar el trigger anterior validando que el usuario
no pueda actualizar el cdigo. Esto debido a que el trigger anterior supone que no se
realizan actualizaciones sobre el campo cdigo
Id Nombre planeta
1 AFRICA TIERRA
2 EUROPA TIERRA
3 ASIA TIERRA
4 OCEANIA TIERRA
5 RUSIA TIERRA
((select count(*)
from CONTINENTE, inserted
where CONTINENTE.nombre like inserted.nombre)=2 AND
(select count(*)
from CONTINENTE, inserted
where CONTINENTE.planeta like inserted.planeta )=1)
begin
El procedimiento almacenado
sp_depends
sp_depends inserta_continente
El procedimiento almacenado
sp_helptext
La instruccin:
sp_helptext inserta_continente
Text
create trigger inserta_continente
on CONTINENTE
for insert as
if (select count(*)
from CONTINENTE, inserted
where CONTINENTE.nombre like inserted.nombre)=2 OR
(select count(*)
((select count(*)
from CONTINENTE, inserted
where CONTINENTE.nombre like inserted.nombre)=2 AND
(select count(*)
from CONTINENTE, inserted
where CONTINENTE.planeta like inserted.planeta )=1)
begin
El procedimiento almacenado
sp_helptrigger
La siguiente instruccin:
sp_helptrigger CONTINENTE
(1 filas afectadas)
El procedimiento almacenado:
sp_help
permite mostrar ayuda sobre cualquier objeto en la base de datos, que se encuentre
especficamente en la tabla sysobjects. Por ejemplo, la siguiente instruccin:
sp_help inserta_continente
Recordemos que en la tabla sysobjects en SQL Server, se almacena informacin sobre los
diversos objetos existentes en la base de datos, por lo cual es interesante observar que
cuando se crea un trigger, se agrega un registro a dicha tabla y se identifica con el nombre
Tr en la columna Type para indicar que se trata de un trigger. Por lo tanto la siguiente
consulta:
select *
from sysobjects
where name like 'inserta_continente'
and type like 'Tr'
ftcatid 0
schema_ver 0
stats_schema_ver 0
type TR
userstat 0
sysstat 8
indexdel 0
refdate 2003-08-25 18:08:23.570
version 0
deltrig 498100815
instrig 0
updtrig 0
seltrig 0
category 0
cache 0
(1 filas afectadas)
Suponga que se crea una tabla ciudadano tal como se muestra a continuacin:
Se pretende en este ejercicio que cuando se hagan inserciones como las siguientes:
En pocas palabras se quiere que el trigger inserte los datos del codigo y del nombre del
ciudadano que el usuario ha solicitado, pero que el valor que se inserte en el campo
longitud_del_nombre sea un valor calculado por el trigger e insertado por el mismo con
el animo de disminuir la probabilidad de error al hacer inserciones manuales.
Recordemos que la tabla inserted contiene los datos que el usuario desea insertar en la
consulta de insercin SQL. La variable @nombrecin1 contiene la cadena del nombre que
se desea insertar. Dicha cadena es pasada a la funcion len() para que esta funcion calcula
el numero de caracteres que contiene la cadena y este campo es insertado con la tabla
ciudadano. Es bueno fijarse que en el caso que el campo tenga una longitud mas grande o
igual a 50 no se hacern inserciones. De todas formas es bueno comprender que si el campo
tiene 50 caracteres, el motor de bases de datos permite la insercin porque este es el
maximo numero de caracteres que se pueden ingresar en el campo nombre de la tabla
ciudadano, pero si el nombre tiene mas de 50 caracteres, antes que el trigger se ejecute ya el
motor ha generado un error similar al siguiente:
Es bueno hacer la siguiente aclaracion que si intentan ejecutar sentencias de insercin como
las siguientes:
Con lo cual queda bien claro que si intentan ingresar explcitamente datos en el campo
longitud_del_nombre, dichos datos son ignorados, por cuanto los datos que son
ingresados en este campo son los que el trigger calcula.
En algunos casos es interesante observar que si se tiene una tabla como la siguiente:
codigo nombre
1 Luis Felipe
2 Ana Esmeralda
3 Claudia Bahamon
4 Carolina Cruz
5 Carolina Sabino
Lo cual muestra que los nombres que son ingresados en el campo nombre de la tabla
ciudadano, son los nombres que el usuario ha solicitado su ingreso tal como los ha escrito
en la consulta SQL de insercin, teniendo en cuenta si los ingreso con mayscula o con
minscula. Esto es bien importante de comprender, puesto que en esta seccin nos
proponemos realizar un trigger que sea capaz de insertar los mismos nombres, pero ahora
todos en minscula, sin importar si la sentencia de insercin por parte del usuario de la base
de datos fue con nombres en mayscula o en minscula.
codigo nombre
1 luis felipe
codigo nombre
1 luis felipe
2 ana esmeralda
3 claudia bahamon
4 carolina cruz
5 carolina sabino
En el cual se observa que sin importar si los nombres son ingresados en mayscula o en
minscula, el trigger convierte todo a minscula y los inserta en la tabla ciudadano.
TAREA PROPUESTA
Como tarea le queda al amigo lector / estudiante que explique la razn por la cual no se
pueden ejecutar todas las sentencias de insercin al tiempo, porque de hacerse, solamente
se efectuara la insercin del primer registro y los dems no se haran. Es bueno que el
lector explique por que es necesario en este ejercicio ejecutar las inserciones una a una para
que el trigger funcione.
codigo Nombre
1 Luis Felipe
2 Ana Esmeralda
3 Claudia Bahamon
4 Carolina Cruz
5 Carolina Sabino
Pero lo que se pretende en esta seccion es que cuando se hagan inserciones, dichos nombres
ingresados, sean pasados a mayusculas antes de ser insertados definitivamente a la tabla.
Esto se puede mediante el siguiente trigger:
codigo nombre
1 Luis Felipe
codigo nombre
1 LUIS FELIPE
2 ANA ESMERALDA
3 CLAUDIA BAHAMON
4 CAROLINA CRUZ
5 CAROLINA SABINO
En el cual se observa que sin importar si los nombres son ingresados en mayscula o en
minscula, el trigger convierte todo a mayscula y los inserta en la tabla ciudadano.
TAREA PROPUESTA
Como tarea le queda al amigo lector / estudiante que explique la razn por la cual no se
pueden ejecutar todas las sentencias de insercin al tiempo, porque de hacerse, solamente
se efectuara la insercin del primer registro y los dems no se haran. Es bueno que el
lector explique por que es necesario en este ejercicio ejecutar las inserciones una a una para
que el trigger funcione.
El siguiente trigger:
codigo nombre
1 epileF siuL
2 adlaremsE anA
3 nomahaB aidualC
4 zurC aniloraC
5 onibaS aniloraC
Con los anteriores ejercicios fue claro que se pueden usar una serie de funciones para hacer
que los triggers hagan ciertas cosas, bien sea ante una insercin, una actualizacin o una
eliminacin. En esta seccin se deja al amigo lector / estudiante que estudie cada una de las
siguientes funciones y sobre cada una de ellas realice triggers de insercin, de actualizacin
y de eliminacin a fin que logre comprender no solamente el funcionamiento de los
triggers, sino tambin de las funciones investigadas.
Lo cual nos deja bien en claro que el trigger se esta ejecutando despus de ejecutada la
sentencia de insercin. Este comportamiento se presenta por la palabra for, la cual le
indica al motor de bases de datos que ejecute el trigger despus de realizada la sentencia de
insercin.
Lo cual nos deja comprender que al igual que el trigger de la seccin anterior, este trigger
se ejecuta despus de ejecutadas las instrucciones de insercin. En pocas trminos podemos
afirmar que tanto las palabras for como after le indican al motor que ejecute el trigger
despus de ejecutadas las instrucciones. Este tipo de cosas es bueno tenerlas en cuenta.
NOTA:
El numero de triggers que una tabla puede tener del tipo for o after pueden ser varios.
Bueno, eso si, teniendo en cuenta que un trigger de pronto no invoque a otro y entonces
tendramos una invocacin infinita de triggers, lo que desembocara en un colapso de la
base de datos en un momento dado. Esta restriccin tambin aplica no solo para tablas, sino
para vistas.
Con lo cual podemos afirmar que cuando se ejecuto el trigger todava no se haba ejecutado
la instruccin de insercin.
NOTA:
El numero de triggers que una tabla puede tener del tipo instead of puede ser mximo de
uno por cada tipo de accin. (Las acciones pueden ser: update, inserted, deleted). Esta
restriccin tambin aplica no solo para tablas, sino para vistas.
TABLA DE CONTENIDO