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