Hola qué tal.
Bienvenidos a este nuevo capítulo del curso completo de base de datos.
Y llegó el turno de los thrillers los thrillers que me lo han pedido tanto en los usuarios del curso
como en redes sociales.
Vamos a explicar que son los thrillers son disparadores.
De hecho la traducción de Thriller es disparador.
Son objetos que se crean en nuestras tablas.
Son objetos que van adosados a nuestras tablas.
No son del motor de la base de datos son por cada tabla hay en Trigueros y lo que hacen estos thrillers
famosos que todo el mundo quiere aprender es ejecutar ciertas operaciones cuando detectan que se ha
ejecutado alguna de las tres operaciones más importantes del lenguaje SQL.
Me refiero a la sentencia INSERT para insertar registros.
La sentencia App Date para actualizar registros y la sentencia Delight.
Ustedes saben que estas sentencias son las más importantes.
Alguno podría pensar que la más importante es la sentencia Cele pero no si nosotros no podemos insertar
modificar o borrar registro en nuestras tablas no tiene sentido alguno la sentencia C.L.
Bueno muy bien.
Ahora estos triggers se usan comúnmente para una cantidad bastante grande de operaciones diferentes
distintos escenarios.
Vamos a ver en ésta en este capítulo tres escenarios diferentes para que ustedes comprendan de qué van
los thrillers.
Nosotros podemos hacer y se los voy a enumerar rápidamente ante una inserción de datos previamente a
que los datos caigan en nuestras tablas y sean insertados.
Podemos controlar que ciertos campos lleven algunas reglas.
Por ejemplo podemos convertir en mayúscula un nombre para que para asegurarnos que todo lo que se grabe
en ese campo va a ser grabado en mayúsculas a veces pasa que en las aplicaciones no queremos meter mucho
código mucha validación y lo que hacemos es directamente creamos un thriller que intercede previamente
a meter los datos en nuestras tablas y hacemos determinadas comprobaciones y operaciones.
Yo dije lo de mayuscula pero imagínense todo tipo de comprobaciones por ejemplo que una edad sea un
número positivo.
Por ejemplo que un valor sea un número positivo también que haya un dato que yo no necesito como requerido.
Y realmente no ha sido ingresado.
Esto va en gustos hay gente que las validaciones las coloca directamente en la aplicación y hay otros
que generan thrillers.
Esta es una de las opciones que tenemos con la austeridad.
Hay otras opciones que son mucho más consistentes y defendibles por decirlo de alguna manera que tienen
que ver con gravar tablas auxiliares o tablas de detalle o tablas históricas suponen.
Supongamos que nosotros queremos que cada vez que se modifica un precio de nuestra tabla a precio de
Tabla Productos se grabe en una tabla el histórico del precio anterior que figuraba en la tabla.
El nuevo precio a qué fecha y hora se hizo el cambio.
Quién fue el usuario que realizó el cambio.
Todo esto lo podríamos hacer de manera programática en nuestro desarrollo pero es mucho más fácil y
mucho más cómodo dejar que el motor de la base de datos se ocupe de hacer estas operaciones esto lo
vamos a saber en ejercicios de este mismo capítulo y también vamos a poder ver cómo intersectan en una
actualización en una inserción o en un borrado de registros.
Cuando nosotros por ejemplo queremos guardar un histórico de los registros que han sido borrados para
en algún momento por algún motivo por si nos arrepentimos o algo poder recuperarlos ustedes saben que
una vez que hemos actualizado información en las tablas una vez que hemos borrado registros no hay vuelta
atrás.
Entonces es importante poder darle uso a los triggers para que realicen toda esta tarea sucia para que
no nos tengamos que meter en nuestros desarrollos.
Este tipo de código vamos a ver un ejemplo Un ejemplo sencillo vamos a saber que nuestra en nuestras
tablas vamos a encontrar dos triggers son estas rueditas que se encuentran aquí.
He creado dos triggers para que los veamos y vamos a crear un tercero en el curso para que ustedes vean
cómo funciona y lo vamos a hacer en tiempo real.
Vamos a ir al primero que es nombre mayuscula cuando ustedes crean un thriller.
Vamos a ver primero como crearlo vamos a ir primero en orden vamos a crear un thriller.
Hay dos maneras de crearlo con botón derecho en la base de datos crear nuevo disparador crear intriga
recuerden que era disparador lo podemos hacer pero el problema de hacerlo aquí que ahí en ese caso el
motor no sabe a qué tabla lo vamos a hacer entonces nos obliga a que nosotros elijamos la tabla que
le coloquemos un nombre nosotros a mano.
Hay una manera más fácil de crear un thriller y es ir directamente a la tabla que nosotros queremos
crear en el thriller botón derecho crear nuevo disparador.
Al hacerlo de esta manera ya el este es nuestra ventana de thriller de nuestro disparador ya automáticamente
me coloca el nombre del thriller.
Nosotros podemos cambiarlo obviamente.
Es más si nosotros tuviéramos más de un thriller para la misma tabla y para el mismo tipo de instrucción
en este caso insert y para el mismo tipo de evento ahora vamos a hablar de esto vamos a tener que cambiarle
el nombre o ponerle un número para que no se repita en primer lugar tenemos el nombre en segundo lugar
la tabla.
No hace falta cambiarlo ya lo hemos hecho nuestro triguera para la tabla clientes.
Luego viene el evento esto es muy importante.
Por qué.
Porque nosotros podemos atajar la modificación o la inserción que vamos a hacer antes de que ocurra
para poder por ejemplo formatear datos antes de que se inserte en mi tabla.
Yo quiero que convertir el nombre mayuscula en el ejemplo que les había dicho Si yo aquí coloco after
o sea después ya no voy a poder hacerlo.
Esto lo va a ejecutar después de que ya inserté los datos una vez que los inserté.
No voy a poder modificar los datos si voy a poder consultarlos y me va a servir para otro tipo de terriers
pero no para modificarlos.
Entienden la diferencia.
Si yo quiero hacer algo un formateo en los datos previo a insertar voy a tener que elegir before.
Luego hay un Vinent y aquí adentro hay todo todos los comandos los mismos comandos que hemos visto en
las rutinas almacenadas pero también voy a tener algo nuevo que son los Nioh y los Soul que los vamos
a explicar bien en los thrillers que vamos a ver de ejemplo y nada más aquí no hay parámetros.
Esto no es algo que uno los llame los thrillers uno no y no interactúa con ellos esto es algo que queda
grabado en el motor de la base de datos adosado a cada una de las tablas donde las hemos definido y
se van a ejecutar dependiendo de las condiciones que nosotros hemos sitiado.
Vamos a ver por ejemplo el primer thriller del másfácil esto no lo voy a grabar que es él se llama nombre
mayuscula es un thriller que va a afectar mi tabla alumnos y se va a ejecutar antes por qué porque yo
voy a transformar la información de que de un Incer no es ni un tequeños un Lilit es un insert cada
vez que haga un insert a mi tabla alumnos se va a ejecutar esto indefectiblemente se va a ejecutar esto
y lo que vamos a sestear.
Es el comando new new se refiere a los datos que yo le estoy mandando para insertar y Hol se refiere
a los campos y los datos que ya estaban previamente grabados en la tabla en una inserción no tenemos
manera si es una inserción CIFOR no tenemos manera de acceder al hold.
Esto es fundamental que lo entiendan.
Si yo estoy queriendo capturar y formatear datos en una instrucción before todavía no sabe cuáles son
los datos anteriores los Hol porque todavía no fue a ejecutar la instrucción.
Y además porque durante el insert tampoco voy a poder sea before o sea after tampoco voy a poder acceder
a al objeto o a los datos previos.
Cuando se usa el sol en los Andes cuando yo voy a actualizar información con un ave el motor puede capturar
cuál era la información que estaba grabado previamente el registro y la puede comparar con los nuevos
datos no sólo comparar sino que puede obtener ambos datos y ambos datos los puedo llegar a grabar en
una tabla histórica eso lo vamos a ver en un ejemplo posterior.
Ahora ustedes tienen que entender este ejemplo.
Vamos a ir por partes qué es lo que hace esto va a sestear va a modificar lo que yo haya puesto en mi
inserción en el campo alumno y el nombre y lo va a regrabar lo va a reemplazar por el mismo campo pero
primero pasado por la función Facebook.
Es la función que me convierte el nombre a mayúsculas.
Esto me convierte el nombre a mayúsculas entonces de esta manera por más que en mi aplicación o desde
cualquier lugar alguien haga un insert y coloque un nombre en minúsculas el motor el thriller se va
a encargar de transformarlo en mayúsculas vamos a ejecutar esto cómo se ejecuta haciendo un insert.
Vamos a borrar esto vamos a hacer INSERT INTO la tabla alumnos la tabla alumnos y le vamos a decir qué
alumno hay del alumno nombre son los campos que yo voy a insertar le voy a poner un valioso y luego
le voy a poner los valores voy a insertar por ejemplo el registro 8 que sé que no existe y voy a colocar
un nombre que puede ser Mariana en minúscula.
Aquí no hace falta Punto y Coma esto es simplemente.
En nuestro panel de consultas una sentencia SQL normal fíjense esta en minúscula cuando sólo ejecuto
si voy a mi tabla alumnos guarda las modificaciones al disparador no voy a encontrar que Mariana se
encuentra en mayúscula.
Esto lo ha hecho el disparador el thriller nombre mayuscula.
Aquí tenemos la definición y el thriller.
Cuando yo coloqué Mariana minuscula me capturó ese campo porque es el campo Nioh y lo reemplazó por
la conversión a mayúscula de ese campo espero que esto se haya entendido.
Vamos a ver un segundo ejemplo ahora un segundo ejemplo que es más es más consistente.
Nosotros hemos creado una tabla llamada productos historial si ustedes quieren coloca en pausa al video
y crean celaba con estas definiciones.
Esta tabla lo que va a hacer es grabar ante un cambio de precios o sea ante un Naveda de mi campo precios
en mi tabla productos va a grabar un historial donde va a grabar el precio anterior el precio nuevo
la fecha fíjense algo muy interesante que no lo habíamos visto que la fecha la reseteado de tipo tam
tam tam tam perdón y en valor predeterminado lo que hace el motor es grabar la fecha y la hora actual
lo pone como valor determinado.
Entonces yo no tengo que incluir mi campo PH guión bajo fecha en la inserción ya el motor se encarga
de colocar el valor y luego tiene un usuario que lo creé de un parchar de 100 donde me va a grabar el
nombre del usuario yo aquí podría poner como valor determinado el nombre que es Garret y Houser pero
lo dejé así para que ustedes vean en el código cómo es que se graba este valor.
Nosotros tenemos esta tabla les aconsejo que la creen y vamos a ir a nuestra a nuestro thriller que
es un.
O sea se va a ejecutar después de hacer esto.
Es importante no puedo hacerlo CIFOR porque si lo hago CIFOR todavía no tengo los datos de qué registro
va a actualizar.
Una vez que los actualizó sí y el motor tiene forma de obtener en el thriller cuál era el campo anterior
graba un registro en memoria de cuál era el campo todo el registro anterior que yo he modificado y lo
compara con el registro actual.
Veamos un poquito esto.
Después del Guincho yo tengo ONIF por qué.
Porque a mí me interesa grabar en esa tabla productos historial cuando el precio viejo es diferente
al precio nuevo porque este thriller se va a ejecutar ante cualquier modificación de mi tabla productos.
Y si yo estoy modificando la descripción porque le estoy cambiando el nombre o estoy modificando el
código de proveedor el Heydi de proveedor o estoy modificando cualquier otro campo pero el precio no
lo he modificado.
Sería inconsistente que yo grabe en la tabla productos historial el precio y el nuevo precio van a ser
el mismo valor.
Estoy estoy cometiendo un error es una inconsistencia.
Solamente quiero alimentar esta tabla cuando el nuevo precio de mi inserción es diferente al viejo aprecio
se entiende esto.
Por eso hoy ONIF una vez que detectó que lo que yo estoy modificando además de otros campos no le interesa.
Estoy modificando el campo precio va a ejecutar el insert que no es más que una instrucción SQL que
hemos visto en mi tabla productos historial a estos campos y de producto a la idea de producto al precio
anterior presión nuevo y usuario y con qué valores.
Bueno el aire de producto uso el Nioh punto aided es lo mismo cernió Hol porque el código de producto
va a ser el mismo aquí por las dudas conviene poner Nioh porque lo más actualizado se que si de casualidad
he cambiado el código de producto cosa que sería imposible.
Bueno dejo el Nioh como convencion y listo.
El precio anterior lo saco de El objeto Ahold punto pero de precio y el precio no tengo aquí miniUSB
precio.
Y ahí estoy grabando el precio anterior y el precio nuevo y el usuario se graba con una función o un
objeto del motor de la base de datos que me obtiene el usuario que está ejecutando el triguero la sentencia
SQL.
Cuidado con esto porque esto seguramente no coincida con el nombre de usuario y ustedes tienen en su
aplicación.
Ustedes hacen una aplicacion con un login con un Pajuelo que el usuario accede a un menú hace operaciones
y ese dato no es el que graba aqui lo que está grabando es por ejemplo Root arroba local Joos.
Entonces si ustedes no tienen por ejemplo creado un usuario en el motor para cada usuario de la aplicación
lo que les va a grabar no les va a decir mucho pero yo tengo que explicarles que existe un objeto en
la base de datos que me permite obtener el nombre de usuario que se conectó a la base de datos.
Fíjense que aquí no pongo ni fecha ni ahora lo pone automáticamente por tener un valor de Ford el motor
y esto es el thriller que se va a ejecutar después de actualizar mi tabla productos ok vamos a ver un
tercer ejemplo.
Vamos a ver un tercer ejemplo vamos a no lo tengo pensado así que lo vamos a hacer medio en línea.
Vamos a ver nuestra tabla proveedores vamos a hacer una rutina almacenada no vamos a ir a nuestra tabla
ventas ahí está vamos a nuestra tabla ventas vamos a crearle un disparador muy bien donde nosotros vamos
a actualizar por ejemplo vamos a capturar en una inserción antes para que para modificar un valor que
puede venir mal entonces aquí vamos a poner.
Por ejemplo si yo punto fíjense que cuando coloco el nuevo punto como sabe que estoy modificando la
tabla de ventas me trae todos los campos para que ellos no los tengo que escribir.
Entonces por ejemplo si el total lo detecta en negativo si el total si el nuevo total es menor a cero
entonces voy a decirle que el mio ventas voy a sitiar perdón lo tengo que se TIAR para asignar un valor
recuerden que tengo que usar la instrucción zait voy a aceptar que Nioh punto ventas total sea igual
a cero se entiende esto cerramos paréntesis y esto es lo que va a hacer es cuando yo quiera insertar
un registro negativo le va a forzar un cero.
Vamos a guardar esto me dice hay algo que no le gustó
que es lo que no le gusto.
Ah perdón tiene razón.
Ahora sí me faltó.
Y ahora lo que no le gusta le faltó terminar la instrucción muy bien claro por qué hay que cerrar Elif
con el DIF y tiene que tener su propio punto y coma y la instrucción que yo coloque que esto puede ir
aquí abajo tiene que tener su propio punto y coma si no hay algo que le falta lo guardamos y ahora vamos
a hacer una inserción vamos a hacer un insert into ventas vamos a grabar Solamente ventas fichã ventas
número factura y ventas total varios y le vamos a decir que la fecha es del 2018 del mes no a ser hacerlo
más actual 2019 vamos a colocar una fecha más o menos cierta.
Vamos a decirle que el número de factura la coma el número de facturas las 158 y vamos a decirle que
el total es menos ciento 56 con 30 y con 58 ahí no vamos a hacer mucho más.
Bueno vamos a tener nuestra factura 158 vamos a ver cómo el thriller interviene
ventas total fuera de rango
me parece que tenemos el problema de que ventas es entero es decimal y entero lo vamos a hacer una trampita
vamos a guardar la tabla la vamos a modificar le sacamos el tilde sin signo y ahora nos va a dejar hacer
la inserción.
Bueno hizo la inserción me dice que hay una fila afectada vamos a nuestra tabla ventas vamos al final
a mostrar todo porque son más de mil registros y vamos a tener nuestra factura 158 con el total en cero.
Esto lo ha hecho el thriller esto no hubiera sido posible sin el thriller.
Alguien ve esta instrucción y no aquí hoy ha pasado algo malo porque yo metí un menos 156 y sin embargo
hay un cero grabado.
Esto lo ha hecho el thriller.
Para esto sirven los thrillers
buenos entiende este es el uso que nosotros le damos a los thrillers pueden jugar mucho más pueden hacer
modificaciones en Apdayc como hemos hecho aquí pueden hacer modificaciones en Lilit para grabar en una
tabla auxiliar y van a poder manejar todo esto de los thrillers y le van a encontrar el uso que ustedes
quieran espero que les haya gustado este capítulo y bueno nos vemos en el siguiente capítulo en la siguiente
sección donde vamos a ver el tema vistas en mi sículo nos vemos en el próximo capítulo.