DELIMITER $$
CREATE OR REPLACE DEFINER=`root`@`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 vDone BOOL;
	DECLARE vSaleList CURSOR FOR SELECT saleFk, hasProblem FROM tmp.sale;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = TRUE;

	OPEN vSaleList;
	l: LOOP
		SET vDone = FALSE;
		FETCH vSaleList INTO vSaleFk, vHasProblem;

		IF vDone THEN
			LEAVE l;
		END IF;

	UPDATE sale
		SET problem = CONCAT(
			IF(vHasProblem,
				CONCAT(problem, ',', vProblemCode),
				REPLACE(problem, vProblemCode , '')))
		WHERE id = vSaleFk;
	END LOOP;
	CLOSE vSaleList;
END$$
DELIMITER ;