У меня есть простая mysql процедура ниже для удаления данных из таблицы на основе переданного аргумента. Я получаю исключение сбоя внешнего ограничения, поскольку зависимые данные не удаляются. Я формирую список идентификаторов для удаления, так как хочу избежать полного сканирования таблицы при использовании подзапросов. Любая помощь приветствуется.
CREATE PROCEDURE `deleteService`(IN serviceID LONG)
BEGIN
DECLARE rpslist varchar(512) DEFAULT "";
DECLARE finished INTEGER DEFAULT 0;
DECLARE rpsid varchar(512) DEFAULT "";
DECLARE rpsidcursor
CURSOR FOR
select id from rpsa where so_id in (select id from rpso where rps_id = serviceID);
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
OPEN rpsidcursor; //fetch ids to delete
getRPSId: LOOP
FETCH rpsidcursor INTO rpsid;
IF finished = 1 THEN
LEAVE getRPSId;
END IF;
SET rpsid = concat("'",rpsid,"'"); -- form concatenated string of IDs
SET rpslist = CONCAT(rpsid,",",rpslist);
END LOOP getRPSId;
CLOSE rpsidcursor;
SET rpslist = substring(rpslist,1,length(rpslist) -1); -- remove last comma
DELETE from uach where rpsa_id in (rpslist); -- delete dependent data . forming the list to hit index
-- this statement fails bcos the delete above did not work and there is foreign constraint
DELETE from rpsa where rpselectedso_id in (select id from rpselectedso where rpaxnservice_id = serviceID);
END