Ejecución De Los Ejemplos BD Brigada
/*CREACIÓN DE LOS TRIGGERS*/
/*EJERCICIO 1*/
/*Crear un trigger para que cada vez que un empleado participe en una brigada se le sume a la bonificacion el
15% del valor de la cantidad de medicamento utilizada en la brigada*/
CREATE TRIGGER tr_Actualiza
ON empleado
FOR UPDATE
AS
UPDATE medicamento
SET
medicamento.cantidad= medicamento.cantidad*inserted.bonificacion+0.15
FROM participa inner join inserted on participa.cedula= inserted.cedula
/*EJERCICIO 2*/
/*Crear un trigger para cada vez que ingrese un brigada se actualice la cantidad de brigadas en proyecto*/
CREATE TRIGGER tr_Noactualiza
ON proyecto
FOR UPDATE
AS
IF UPDATE (cantidad_brigadas)
BEGIN
PRINT 'No se puede actualizar'
ROLLBACK TRANSACTION
END
UPDATE proyecto
SET
cantidad_brigadas= cantidad_brigadas +1
/*EJERCICIO 3*/
/*Create un trigger que permita controlar la cantidad del medicamento cuando estos se borran de una brigada*/
CREATE TRIGGER tr_Borrarbrid_med_controlCantidadMed
ON bri_med
FOR DELETE
AS UPDATE medicamento
SET
medicamento.cantidad=medicamento.cantidad+deleted.canti_utilizada
FROM medicamento inner join deleted
ON medicamento.cod_med=deleted.cod_med
/*CREACIÓN DE LAS VISTAS*/
/*EJERCICIO 1*/
/*Crear una vista actualizable que muestre los datos de los medicamentos con un valor mayor que 50000*/
CREATE VIEW v_Medicamento
AS
SELECT medicamento.*
FROM medicamento
WHERE valor>50000
/*EJERCICIO 2*/
/*Crear una vista no actualizable que muestre los datos de loe empleados y un aumento del 10% sobre su bonificacion y su salario si este está
entre 600000 y 2000000 y han participado en mas de 2 brigadas*/
CREATE VIEW v_EmpleadoCondicio
AS
CREATE VIEW v_empleadoCondicion
AS
SELECT empleado.*, salario+(salario*0.1) as salarioAunmento,bonificacion+(bonificacion*0.1) as bonificacionAumento
FROM empleado inner join participa
ON empleado.cedula=participa.cedula
WHERE salario between 600000 and 2000000
GROUP BY participa.cedula,empleado.cedula,empleado.bonificacion,empleado.nom_emp,empleado.salario,empleado.telefono
HAVING COUNT(*)>2
/*CREACIÓN DE LO PROCEDIMIENTOS ALMACENADOS*/
/*EJERCICIO 1*/
/*Crear un procedimiento que le permita masotrar los datos de los medicamentos que tengan un valor mayor
que le permita de todos los valor de los medicamentos con una cantidad entre dos valores dados por el usuario*/
CREATE PROCEDURE pr_Promedio
@val1 int,
@val2 int,
@total int
AS
SELECT medicamento.*, AVG(medicamento.valor) FROM
medicamento
WHERE medicamento.cantidad between @val1 and @val2
GROUP BY
medicamento.cantidad, medicamento.cod_med, medicamento.nom_med, medicamento.forma_uso, medicamento.valor
HAVING AVG (medicamento.valor)>@total EXEC pr_Promedio 15,21,20000
/*EJERCICIO 2*/
/*Crear un procedimiento que le permita mostrar los datos de los medicamentos con un valor dado por el usuario y un total utilizado
mayor que un valor dado por el usuario*/
CREATE PROCEDURE pr_mostrar_Med
@valor int,
@valorusu int
AS
SELECT medicamento.*, sum(cant_utilizada)
FROM medicamento inner join bri_med
ON medicamento.cod_med= bri_med.cod_med
WHERE medicamento.cod_med=@valorusu
GROUP BY
bri_med.cod_med,bri_med.canti_utilizada,medicamento.cod_med, medicamento.nom_med, medicamento.forma_uso,
medicamento.cantidad, medicamento.valor having sum(*)>@Valor
exec Pr_Mostrar_Med 001,500
/*CREACIÓN DE LA FUNCIÓN*/
/*Crear un función lineal que muestre los datos de las brigadas realizadas entre las fechas dadas por el usuario con un total mayor que un valor
dado por el usuario*/
create function F_Brigadas
(@Fechai datetime,
@Fechaf datetime, @Valor int)
returns table
as
return(select *
from Participa inner join brigada
on participa.cod_bri= brigada.cod_bri
inner join Bri_med
on brigada.cod_bri inner join Bri_med.cod_bri
where Participa.fecha between @Fechai and @Fechaf
group by Bri_med.cod_bri, brigada.cod_bri , brigada.nom_bri, brigada.cod_proy, brigada.fecha_b having sum(canti_utilizada*)>@Valor)
select * from F_Brigadas('12/07/2010','01/10/2012',501)
Comentarios
Publicar un comentario