[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