Bonsoir,
Avec MySQL, j’ai l’impression qu’il reste la méthode bourrin, c'est-à-dire utiliser un curseur dans une procédure, comme il y a 40 ans...
Une table :
CREATE TABLE T
(
Num INTEGER NOT NULL
, Mail VARCHAR(32) NOT NULL
, CONSTRAINT T_PK PRIMARY KEY (Num)
) ;
La procédure avé le curseur :
DROP PROCEDURE IF EXISTS CursonsJoyeusement ;
DELIMITER GO
CREATE PROCEDURE CursonsJoyeusement
(
IN Gazier VARCHAR(32),
OUT Numero INT
)
BEGIN
DECLARE Fini INTEGER DEFAULT FALSE ;
DECLARE theKount INTEGER ;
DECLARE theGazier VARCHAR(32) ;
DECLARE C1 CURSOR FOR
SELECT Mail FROM T ORDER BY Num ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET Fini = TRUE ;
SET theKount = (SELECT COUNT(*) FROM T) ;
SET Numero = 1 ;
OPEN C1 ;
BOUCLE: LOOP
FETCH C1 INTO theGazier ;
IF Fini OR theGazier = Gazier THEN
LEAVE BOUCLE ;
END IF ;
SET Numero = Numero + 1 ;
END LOOP ;
IF Numero > theKount THEN
SET Numero = 0 ; -- Si pas trouvé
END IF ;
CLOSE C1 ;
END
GO
DELIMITER ;
SELECT * FROM T ;
SET @Gazier = 'Paul' ;
CALL CursonsJoyeusement (@Gazier, @Numero) ;
SELECT 'numéro de ligne = ' , @Numero
Partager