-
Notifications
You must be signed in to change notification settings - Fork 0
/
4_Triggers.sql
116 lines (89 loc) · 2.89 KB
/
4_Triggers.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
begin /* 5 TRIGGERS */
/* A) Crear el disparador trig5_a para que una vez ingresado un Trunk se genere un registro Enlace_Trunk
para cada sucursal que compone dicho Trunk. */
CREATE TRIGGER trig5_a
ON TRUNK
AFTER INSERT
AS
BEGIN
insert into LogTriggers ([tipoTrigger],[fecha])
values ('A',getdate())
INSERT INTO Enlace_Trunk (idTrunk,idEnlace)
(SELECT I.idTrunk, E.idEnlace FROM INSERTED I, enlace E WHERE E.codSuc=I.codSucOri)
INSERT INTO Enlace_Trunk (idTrunk,idEnlace)
(SELECT I.idTrunk, E.idEnlace FROM INSERTED I, enlace E WHERE E.codSuc=I.codSucDes)
END;
select * from trunk
select * from Enlace_Trunk
/* B) Implementar un disparador trig5_b que no permita ingresar Enlaces si el precio del tipo de enlace
supera el promedio total de precios de todos los enlaces contratados, de ser este el caso se debe mostrar un
aviso por pantalla. */
CREATE TRIGGER trig5_b
ON ENLACE
INSTEAD OF INSERT
AS
BEGIN
insert into LogTriggers ([tipoTrigger],[fecha])
values ('B',getdate())
IF (SELECT TE.precioTipo
FROM INSERTED I, TIPO_ENLACE TE
WHERE I.codTipo=TE.codTipo)>(SELECT AVG(TE.precioTipo)
FROM TIPO_ENLACE TE, ENLACE E
WHERE E.codTipo=TE.codTipo)
BEGIN
PRINT('Precio del tipo de enlace es superior al promedio total
de precios de enlaces contratados')
END
ELSE
BEGIN
INSERT INTO ENLACE
(codSuc,codIsp,fchEnlace,fchFin,codTipo,ipEnlace,maskEnlace,gatewayEnlace,dns1Enlace,dns2Enlace)
SELECT codSuc,codIsp,fchEnlace,fchFin,codTipo,ipEnlace,maskEnlace,gatewayEnlace,dns1Enlace,dns2Enlace
FROM INSERTED
END
END;
/* C) Crear un disparador trig5_c que al borrar un enlace permita borrar en cascada todos los registros
asociados a dicho enlace. */
CREATE TRIGGER trig5_c
ON ENLACE
INSTEAD OF DELETE
AS
BEGIN
insert into LogTriggers ([tipoTrigger],[fecha])
values ('C',getdate())
DELETE FROM EQUIPOS
WHERE idEnlace in (SELECT idEnlace FROM DELETED)
DELETE FROM ENLACE_TRUNK
WHERE idEnlace in (SELECT idEnlace FROM DELETED)
DELETE FROM ENLACE
WHERE idEnlace in (SELECT idEnlace FROM DELETED)
END
DELETE FROM ENLACE
WHERE idEnlace=5
SELECT * FROM ENLACE
select * from logtriggers
/* D) Con el disparador trig5_d cada vez que se ingrese un registro al trunk de una sucursal con otra
(A con B), registrar su opuesto (B con A). */
CREATE TRIGGER trig5_d
ON TRUNK
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO TRUNK(codSucOri,codSucDes,fchTrunk,stsTrunk)
SELECT I.codSucDes, I.codSucOri, I.fchTrunk, I.stsTrunk
FROM INSERTED I
END
INSERT INTO trunk
VALUES ('urusuc0001','urusuc0002','20150305','A')
SELECT * FROM TRUNK
/* Disparador que pasa a mayusculas el codigo de equipo*/
CREATE TRIGGER Mayus_codEquipo
ON EQUIPOS
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO EQUIPOS
SELECT UPPER(codEquipo),marcaEquipo,fchEquipo,vtoEquipo,idEnlace
FROM INSERTED
END
end