Ciao
Avevo qualche infarinatura in sql2000 di MS, ma ora usando MySql mi trovo con qualche problema, in particolare sulle StoreProcedures.
questa store:
e il successivo richiamocodice:DELIMITER // CREATE PROCEDURE prova (OUT tot INT,OUT c1 INT) BEGIN DECLARE cur2 CURSOR FOR SELECT count(*) FROM prove.old WHERE flag <> 0; OPEN cur2; FETCH cur2 INTO tot; CLOSE cur2; set c1 = tot; END; // DELIMITER ;
CALL prova(@tot,@c1);
select @tot,@c1;
risponde correttamente:
+-------+-------+
| @tot | @c1 |
+-------+-------+
| 33322 | 33322 |
+-------+-------+
1 row in set (0.00 sec)
Se aggiungo un cursore nella SP, non funge neanche il codice precedente;
al richiamo:codice:DELIMITER // CREATE PROCEDURE prova (OUT tot INT,OUT c1 INT, OUT c2 INT) BEGIN DECLARE done INT; DECLARE ip_start BIGINT; DECLARE ip_to BIGINT; DECLARE city_code INT; DECLARE flag TINYINT; DECLARE cur2 CURSOR FOR SELECT count(*) FROM prove.old WHERE flag <> 0; DECLARE cur1 CURSOR FOR SELECT * FROM prove.old WHERE flag <> 0; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN cur2; FETCH cur2 INTO tot; CLOSE cur2; set c1 = 0; set c2 = 0; set done = 0; OPEN cur1; REPEAT FETCH cur1 INTO ip_start,ip_to,city_code,flag; IF NOT done THEN IF flag = 1 THEN SET c1 = c1 + 1; ELSE SET c2 = c2 + 1; END IF; END IF; UNTIL done END REPEAT; CLOSE cur1; END; // DELIMITER ;
CALL prova(@tot,@c1,@c2);
select @tot,@c1,@c2;
la risposta è:
mysql> CALL prova(@tot,@c1,@c2);
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select @tot,@c1,@c2;
+------+------+------+
| @tot | @c1 | @c2 |
+------+------+------+
| 0 | 0 | 0 |
+------+------+------+
1 row in set (0.00 sec)
perchè? dove sbaglio?
grazie in anticipo
JeanPaul

Rispondi quotando