Quando houver uma chave única em uma tabela (não PRIMARY KEY
) e o procedimento estiver em execução, em caso de erro de chave duplicada, todo o processo será interrompido. Desejo retomar em caso de erro e chamar o procedimento novamente.
O procedimento:
DELIMITER $$
CREATE PROCEDURE `injatest`.`LoadData` ()
BEGIN
DECLARE x INT;
SET x = 1;
WHILE x <= 14400 DO
INSERT INTO junc_question_course_iq(q_id,iq_id,ct_id) VALUES
(CEIL(RAND()*1000), CEIL(RAND()*48), CEIL(RAND()*10));
SET x = x + 1;
END WHILE;
END $$
DELIMITER ;
Quero inserir cerca de 14000 registros em uma tabela de junção, mas o problema surge quando há uma chave duplicada para unique(iq_id,q_id)? o que fazer?
Você pode usar
DECLARE CONTINUE HANDLER FOR SQLSTATE
para ignorar a violação de chave declarando um bloco vazio como um manipulador de exceção, da seguinte maneira: