DELIMITER $$ CREATE OR REPLACE DEFINER=`vn`@`localhost` PROCEDURE `vn`.`sale_setProblem`( vProblemCode VARCHAR(25) ) BEGIN /** * Update column sale.problem with a problem code * * @param vProblemCode Code to set or unset * @table tmp.sale(saleFk, hasProblem, isProblemCalcNeeded) */ DECLARE vSaleFk INT; DECLARE vHasProblem INT; DECLARE vIsProblemCalcNeeded BOOL; DECLARE vDone BOOL; DECLARE vSaleList CURSOR FOR SELECT saleFk, hasProblem, isProblemCalcNeeded FROM tmp.sale; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE; OPEN vSaleList; l: LOOP SET vDone = FALSE; FETCH vSaleList INTO vSaleFk, vHasProblem, vIsProblemCalcNeeded; IF vDone THEN LEAVE l; END IF; UPDATE sale SET problem = IF (vIsProblemCalcNeeded, CONCAT( IF(vHasProblem, CONCAT(problem, ',', vProblemCode), REPLACE(problem, vProblemCode , ''))), NULL) WHERE id = vSaleFk; END LOOP; CLOSE vSaleList; END$$ DELIMITER ;