MySQL - Ayuda en Procedimiento Almacenado

 
Vista:
sin imagen de perfil

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:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder