Skip to main content

jmar.fr

MySQL Procédures Stockées

J’ai eu besoin, dans le cadre d’un projet, de supprimer des lignes sur certaines tables contenant un ID spécifique. Cette manipulation devant se faire régulièrement, une procédure stockée a été créée.

DELIMITER $$ 
DROP PROCEDURE IF EXISTS DeleteOrphan$$ 

CREATE PROCEDURE DeleteOrphan(IN hwid INT) 
BEGIN 
 DECLARE done INT DEFAULT 0; 
 DECLARE var_table VARCHAR(64); 
 DECLARE curseur1 CURSOR FOR 
                     SELECT DISTINCT table_name 
                     FROM information_schema.tables 
                     WHERE table_name LIKE 'aaa_%' 
                     AND table_schema='MySchema'; 
 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; 

 -- Ouverture du curseur 
 OPEN curseur1; 
    REPEAT 
 -- On récupère chaque élément dans var_table 
         FETCH curseur1 INTO var_table; 
          -- Si done = 0 (donc tant qu'on a pas SQLSTAT 02000 
          IF done = 0 THEN 
                SET @query = CONCAT('DELETE FROM ', var_table,' WHERE hardware_id = ', hwid); 
                PREPARE stmt FROM @query; EXECUTE stmt; 
          END IF; 
          UNTIL done 
          -- Done = 1 si on a SQLSTAT 02000 (No data - zero rows fetched, selected, or processed ) 
    END REPEAT; 
 CLOSE curseur1; 
END$$ 
DELIMITER ;