41 lines
1.0 KiB
SQL
41 lines
1.0 KiB
SQL
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 ; |