[Db] stored procedure: dov'è l'errore?
Marcello Vezzelli
marcello a vezz.it
Mer 22 Ago 2007 18:48:18 CEST
Ciao a tutti,
ho provato a implementare la stored procedure di cui si parlava nel
topic precedente.
Questa è la tabella:
CREATE TABLE IF NOT EXISTS `meeting` (
`id` int(11) NOT NULL auto_increment,
`chiave` varchar(24) character set latin1 collate latin1_general_cs
NOT NULL,
`descr` varchar(50) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `chiave` (`chiave`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
AUTO_INCREMENT=1 ;
Questa è l'sql che crea la stored procedure:
delimiter //
use ew
//
DROP PROCEDURE IF EXISTS GetKey
//
CREATE procedure GetKey(IN campo1 VARCHAR(150),OUT p_text
VARCHAR(30),OUT i_id INT)
BEGIN
DECLARE newchiave VARCHAR(32);
DECLARE newchiave_esiste INT;
REPEAT
SET @i=0;
SET @x=0;
SET newchiave = '';
SET newchiave_esiste = 0;
SET
@alpha='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
REPEAT
SET @i=@i+1;
SET @x=FLOOR(RAND() * (CHAR_LENGTH(@alpha)));
SET newchiave=CONCAT(newchiave,SUBSTRING(@alpha, a x,1));
UNTIL @i>24
END REPEAT;
/* controllo se la chiave esiste */
SET i_id = 0;
SELECT id INTO i_id FROM meeting WHERE chiave=newchiave COLLATE
latin1_general_cs LIMIT 1;
IF (i_id=0) OR (i_id=NULL) THEN
INSERT INTO meeting (chiave,descr) VALUES (newchiave,campo1);
/* se fallisce la insert, LAST_INSERT_ID()=0 */
SET i_id=LAST_INSERT_ID();
END IF;
UNTIL i_id = 0
END REPEAT;
SET p_text = newchiave;
END
//
delimiter ;
Ora se la testo così':
SET @test='';
SET @cid=-1;
CALL GetKey('ciao', a test, a cid);
SELECT @test, a cid;
Ottengo
ERROR 1329 (02000): No data - zero rows fetched, selected, or processed
mysql> SELECT @test, a cid;
+-------+------+
| @test | @cid |
+-------+------+
| | -1 |
+-------+------+
1 row in set (0.00 sec)
Cosa sbaglio?
Ciao
Marcello
Maggiori informazioni sulla lista
Db