
Ayuda en Procedimiento Almacenado
Publicado por Rocio (3 intervenciones) el 26/08/2016 20:47:21
Hola, buenas tardes.
Estoy tratando de hacer un procedimiento almacenado, en el que tengo que sacar un conteo y un porcentaje de unos campos. Esto es lo que tengo creado hasta hoy:
Soy nueva en esto de los Procedimientos Almacenados, me gustaria saber si sería algo así, o en que estoy mal.
Gracias de antemano.
Estoy tratando de hacer un procedimiento almacenado, en el que tengo que sacar un conteo y un porcentaje de unos campos. Esto es lo que tengo creado hasta hoy:
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
DELIMITER $$
DROP PROCEDURE IF EXISTS `cecjude`.`spestadisticas` $$
CREATE PROCEDURE `cecjude`.`spestadisticas` (IN par_pkpenal INT,
IN par_fechaInicial DATE,
IN par_fechaFinal DATE )
SQL SECURITY INVOKER
BEGIN
DECLARE var_iterador INT DEFAULT 0;
DECLARE var_contadorgPenal INT DEFAULT 0;
DECLARE var_contadorgPropietario INT DEFAULT 0;
DECLARE var_contadorgConductor INT DEFAULT 0;
DECLARE var_porcentajePropietario DOUBLE(16,2) ;
DECLARE var_porcentajeConductor DOUBLE(16,2) ;
DECLARE var_pkpenal INT;
DECLARE var_nombrePenal VARCHAR(150);
DECLARE var_nombrePropietario VARCHAR(150);
DECLARE var_nombreConductor VARCHAR(150);
DECLARE var_nivel INT;
DECLARE var_total INT;
DECLARE cursorPenal CURSOR FOR SELECT vv.pkpenal,
p.nombrePenal,
COUNT(vv.pkpenal) AS ContadorPenal
FROM visitasvehiculos vv
INNER JOIN penales p ON p.pkpenal = vv.pkpenal
WHERE vv.pkpenal = par_pkpenal AND
fechaEntrada >= par_fechaInicial
GROUP BY pkpenal;
DECLARE cursorPropietario CURSOR FOR SELECT vv.pkpenal,
p.nombrePenal,
vv.nombrePropietario,
COUNT(vv.nombrePropietario) AS ContadorPropietario
FROM visitasvehiculos vv
INNER JOIN penales p ON p.pkpenal = vv.pkpenal
WHERE vv.pkpenal = par_pkpenal AND
fechaEntrada >= par_fechaInicial
GROUP BY nombrePropietario;
DECLARE cursorConductor CURSOR FOR SELECT vv.pkpenal,
p.nombrePenal,
vv.nombrePropietario,
vv.nombreConductor,
COUNT (vv.nombreConductor) AS ContadorConductor
FROM visitasvehiculos vv
INNER JOIN penales p ON p.pkpenal = vv.pkpenal
WHERE vv.pkpenal = par_pkpenal AND
fechaEntrada >= par_fechaInicial
GROUP BY nombreConductor;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET var_iterador = 1;
START TRANSACTION;
OPEN cursorPenal;
LcursorPenal:LOOP
FETCH cursorPenal INTO var_pkpenal,
var_nombrePenal,
var_nombrePropietario,
var_nombreConductor;
IF (var_iterador = 1) THEN
SET var_iterador = 0;
LEAVE LcursorPenal;
END IF;
INSERT INTO visitasvehiculosestadisticas(pkpenal,nombrePenal, nombrePropietario,
nombreConductor, nivel, total, porcentaje)
VALUES(par_pkpenal,var_nombrePenal,var_nombrePropietario,
var_nombreConductor, 1, ContadorPenal, 100);
END LOOP;
CLOSE cursorPenal;
OPEN cursorPropietario;
LcursorPropietario:LOOP
FETCH cursorPropietario INTO var_pkpenal,
var_nombrePenal,
var_nombrePropietario,
var_nombreConductor,
var_nivel,
var_total;
IF (var_iterador = 1) THEN
SET var_iterador = 0;
LEAVE LcursorPropietario;
END IF;
SET var_porcentajePropietario = ((ContadorPenal/ContadorPropietario) * 100);
INSERT INTO visitasvehiculosestadisticas(pkpenal,nombrePenal,Propietario,
Conductor,nivel,total, porcentaje)
VALUES(par_pkpenal,var_nombrePenal,var_nombrePropietario,
var_nombreConductor, 2, ContadorPropietario, var_porcentajePropietario );
END LOOP;
CLOSE cursorPropietario;
OPEN cursorConductor;
LcursorConductor:LOOP
FETCH cursorConductor INTO var_pkpenal,
var_nombrePenal,
var_nombrePropietario,
var_nombreConductor,
var_nivel,
var_total;
IF (var_iterador = 1) THEN
SET var_iterador = 0;
LEAVE LcursorConductor;
END IF;
SET var_porcentajeConductor = ((ContadorPropietario/ContadorConductor) * 100);
INSERT INTO visitasvehiculosestadisticas(pkpenal,nombrePenal,Propietario,
Conductor,nivel,total, porcentaje)
VALUES(par_pkpenal,var_nombrePenal,var_nombrePropietario,
var_nombreConductor, 3, ContadorConductor, var_porcentajeConductor );
END LOOP;
CLOSE cursorConductor;
COMMIT;
END $$
DELIMITER ;
Soy nueva en esto de los Procedimientos Almacenados, me gustaria saber si sería algo así, o en que estoy mal.
Gracias de antemano.
Valora esta pregunta


0