Admito que estoy debil en cursores en MySQL ya que me dedico mas al PL/SQL de Oracle que de MySQL, por ende tuve que buscar referencias de sintaxis de cursor en MySQL para guiarme. Esto a lo mejor te pueda ayudar (un analista programador podria convertir lo siguiente en sus necesidades):
Imaginate que tengo esta tabla y estos datos:
Código
mysql> SELECT * FROM juicio; +--------+---------+---------+---------+ | id_jui | tip_jui | aut_jui | sal_jui | +--------+---------+---------+---------+ | 1 | 1 | 1 | 4 | | 1 | 1 | 1 | 4 | | 1 | 1 | 1 | 4 | | 1 | 1 | 1 | 10 | | 1 | 1 | 1 | 10 | | 1 | 2 | 2 | 10 | | 1 | 2 | 2 | 10 | | 1 | 2 | 2 | 10 | | 1 | 2 | 2 | 4 | +--------+---------+---------+---------+ 9 ROWS IN SET (0.00 sec)
Ahora creo un procedimiento almacenado con un cursor:
Código
mysql> delimiter / mysql> CREATE PROCEDURE hongo(p1 INT, p2 INT, p3 INT) -> BEGIN -> DECLARE terminado INT DEFAULT 0; -> DECLARE b,c INT; -> DECLARE cur1 cursor FOR SELECT COUNT(id_jui) FROM `juicio` WHERE tip_jui = p1 AND aut_jui = p1 AND sal_jui = p3; -> DECLARE cur2 cursor FOR SELECT COUNT(id_jui) FROM `juicio` WHERE tip_jui = p2 AND aut_jui = p2 AND sal_jui = p3; -> DECLARE continue handler FOR sqlstate '02000' SET terminado = 1; -> OPEN cur1; -> OPEN cur2; -> repeat -> fetch cur1 INTO b; -> SET @todo1 := b; -> fetch cur2 INTO c; -> SET @todito1 := c; -> until terminado END repeat; -> close cur1; -> close cur2; -> END; -> / Query OK, 0 ROWS affected (0.00 sec) mysql> delimiter ;
Un procedimiento que soporta 3 parametros, dichos parametros pueden ir entre 1,1,10 o 2,2,4 como tu ejemplo expone, por ejemplo:
Código
mysql> CALL hongo(1,2,10); Query OK, 0 ROWS affected (0.00 sec) mysql> SELECT @todo1; +--------+ | @todo1 | +--------+ | 2 | +--------+ 1 ROW IN SET (0.00 sec) mysql> SELECT @todito1; +----------+ | @todito1 | +----------+ | 3 | +----------+ 1 ROW IN SET (0.00 sec) mysql> CALL hongo(2,2,4); Query OK, 0 ROWS affected (0.00 sec) mysql> SELECT @todo1; +--------+ | @todo1 | +--------+ | 1 | +--------+ 1 ROW IN SET (0.00 sec) mysql> SELECT @todito1; +----------+ | @todito1 | +----------+ | 1 | +----------+ 1 ROW IN SET (0.00 sec)
Analizalo