Guía larga de Procedures para resolver
Base de datos necesaria para resolverla
Guía adicional de triggers
1) Crear un trigger que ante cada nueva venta, inserte un registro en una tabla “Reporte” especialmente diseñada que contenga el nombre del vendedor, el nombre del producto, la cantidad de kilos, la fecha de la venta, y la fecha en la que se realiza la inserción.
2) Crear un stored procedure que dado el nombre de un producto, y un nuevo precio, modifique ese precio, y muestre la cantidad de plata extra que se hubiera ganado en las ventas realizadas si se hubiera cobrado con el nuevo valor. En caso de que el nuevo valor supere en un 50% el valor anterior, la transacción debe fallar.
3) Crear un trigger que cada vez que se modifique el precio de un producto, guarde en una tabla “Modificaciones_precio” creada anteriormente para tal fin un registro nuevo con el nombre del producto, el precio antiguo, el nuevo, el momento de la modificación y el cálculo de cual fue el porcentaje de aumento acumulado con respecto al primer precio registrado para el producto.
CREATE TRIGGER <nombre> <BEFORE/AFTER> <INSERT/DELETE/UPDATE> ON <tabla>
FOR EACH ROW
BEGIN
END;
Si es Insert, se utiliza la tabla NEW, que tiene los registros que se van a insertar. Ejemplo, acotar las inserciones a 1900 kilos.
IF NEW.kilos > 1900 THEN
NEW.kilos = 1900
END IF;
Si es Update, existe la tabla NEW con los nuevos valores, y la tabla OLD con los valores que se van a reemplazar.
Si es Delete, sólo existe la tabla OLD con los valores reemplazados.
Como ejemplo de Storeds procedures, se puede considerar el ejercicio 1 de la guía adjunta resuelto
CREATE PROCEDURE `p1`(in practtema varchar(50), in practnombre varchar(50), in descripcionPract longtext)
BEGIN
declare vtema int;
declare exit handler for sqlexception rollback;
start transaction;
select idtema into vtema from tema where tema=practtema;
if vtema is null then
insert into tema(tema) values(practtema);
select idtema into vtema from tema where descripcionPract=tema;
end if;
insert into practicas(idtema, descripcion, nombre) values(vtema, descripcionpract, practnombre);
commit;
END;