-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path3_Procedimientos - Funciones.sql
147 lines (122 loc) · 4.34 KB
/
3_Procedimientos - Funciones.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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
begin /* 4 PROCEDIMIENTOS Y FUNCIONES */
/* A) Crear un procedimiento almacenado proc4_a que dado un rango de fechas retorne por parámetro cuantos
enlaces se dieron de alta en dicho rango y cuál fue el mayor ancho de banda contratado. */
CREATE PROCEDURE proc4_a
@fechaINI DATE,
@fechaFIN DATE,
@cantEnlaces INT OUTPUT,
@mayorAnchoBanda INT OUTPUT
AS
BEGIN
SET @cantEnlaces = (SELECT COUNT(idEnlace) FROM ENLACE
WHERE fchEnlace BETWEEN @fechaINI AND @fechaFIN)
SET @mayorAnchoBanda = (SELECT DISTINCT TE.anchoTipo
FROM TIPO_ENLACE TE, ENLACE E
WHERE TE.codTipo=E.codTipo
AND E.fchEnlace BETWEEN @fechaINI AND @fechaFIN
AND TE.anchoTipo >=ALL (SELECT MAX(anchoTipo) FROM TIPO_ENLACE))
PRINT @cantEnlaces
PRINT @mayorAnchoBanda
END
DECLARE @fechaINI DATE, @fechaFIN DATE, @cantEnlaces VARCHAR , @mayorAnchoBanda VARCHAR
EXEC proc4_a '20130101', '20160101', @cantEnlaces OUTPUT, @mayorAnchoBanda OUTPUT
/* B) Implementar una función fun4_b que reciba un código de sucursal y retorne el promedio pagado por enlaces
en el año actual por dicha sucursal. */
CREATE FUNCTION fun4_b
(
@codSuc CHAR(10)
)
RETURNS INT
AS
BEGIN
DECLARE @avgEnlaces INT
SELECT @avgEnlaces =AVG(TE.precioTipo)
FROM TIPO_ENLACE TE, ENLACE E
WHERE TE.codTipo=E.codTipo
AND YEAR(GETDATE()) BETWEEN DATEPART(YYYY,E.fchEnlace) AND DATEPART(YYYY,e.fchFin)
--AND DATEPART(YYYY,E.fchEnlace)=DATEPART(YYYY,GETDATE())
AND E.codSuc=@codSuc
RETURN @avgEnlaces
END
SELECT dbo.fun4_b('urusuc0001')
/* C) Crear un procedimiento almacenado proc4_c que dado un ISP, una sucursal y un importe genere un enlace
con la fecha del día, 30 días de vencimiento y con un tipo de enlace cuyo precio sea el importe pasado como
parámetro, si este precio no existe entonces el inmediatamente superior, los campos correspondientes a la ip,
mascara, puerta de enlace y DNS deben quedar con 0.0.0.0 */
CREATE PROCEDURE proc4_c
@codIsp INT,
@codSuc CHAR(10),
@importe INT
AS
BEGIN
IF @importe in (SELECT precioTipo FROM TIPO_ENLACE)
BEGIN
INSERT INTO ENLACE
(codSuc,codIsp,fchEnlace,fchFin,codTipo,ipEnlace,
maskEnlace,gatewayEnlace,dns1Enlace,dns2Enlace)
VALUES
(@codSuc,@codIsp,(SELECT GETDATE()),(SELECT DATEADD(DAY,30,GETDATE())),
(SELECT codTipo FROM TIPO_ENLACE WHERE precioTipo=@importe),'0.0.0.0',
'0.0.0.0','0.0.0.0','0.0.0.0','0.0.0.0')
END
ELSE
BEGIN
INSERT INTO ENLACE
(codSuc,codIsp,fchEnlace,fchFin,codTipo,ipEnlace,
maskEnlace,gatewayEnlace,dns1Enlace,dns2Enlace)
VALUES
(@codSuc,@codIsp,(SELECT GETDATE()),(SELECT DATEADD(DAY,30,GETDATE())),
(SELECT codTipo FROM TIPO_ENLACE
WHERE precioTipo>@importe and precioTipo <=(select min(precioTipo)
FROM TIPO_ENLACE
WHERE precioTipo>@importe)),
'0.0.0.0','0.0.0.0','0.0.0.0','0.0.0.0','0.0.0.0')
END
END
DECLARE @codIsp int, @codSuc CHAR(10), @importe int
EXEC proc4_c 1, 'argsuc0001', 36
select * from tipo_enlace
select * from enlace
/* D) Crear una función fun4_d que dada una IP retorne el código de equipo asociado a dicha IP que tenga la
garantía vencida, si están todos vigentes la función debe retornar ‘VIGENTES’ */
CREATE FUNCTION fun4_d
(
@IP VARCHAR(15)
)
RETURNS CHAR(10)
AS
BEGIN
DECLARE @codEquipo CHAR(10)
IF EXISTS(SELECT codEquipo FROM EQUIPOS WHERE vtoEquipo<GETDATE())
BEGIN
SELECT @codEquipo = EQ.codEquipo
FROM EQUIPOS EQ, ENLACE E
WHERE EQ.idEnlace = E.idEnlace
AND E.ipEnlace = @IP
AND EQ.vtoEquipo<GETDATE()
END
ELSE
BEGIN
SELECT @codEquipo='Vigentes'
END
RETURN @codEquipo
END
SELECT * FROM EQUIPOS
SELECT ipEnlace FROM ENLACE WHERE idEnlace=12
DELETE FROM EQUIPOS WHERE vtoEquipo<GETDATE()
SELECT dbo.fun4_d('192.169.2.2')
/* E) Definir el procedimiento proc4_e que cambie los estados de los Trunk a Activo para todos los Trunk que
tengan estado diferente a Activo y cuyo Enlace fuera dado de alta en el mes corriente. */
CREATE PROCEDURE proc4_e
AS
BEGIN
UPDATE TRUNK
SET stsTrunk='A'
WHERE stsTrunk<>'A'
AND DATEPART(MM,fchTrunk)=DATEPART(MM,GETDATE())
END
SELECT * FROM TRUNK
INSERT INTO trunk
VALUES ('brasuc0001','brasuc0002','20150605','I')
EXEC proc4_e
end