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

Entradas populares de este blog

Solucionando problemas caminos y circuitos mediante grafos.