DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`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 ;