Nenhum aviso de dados em procedimentos armazenados: "Erro 1329: Zero linhas buscadas, selecionadas ou processadas"
Na programação de banco de dados, procedimentos armazenados são frequentemente usados para encapsular operações complexas e garantir a integridade dos dados. No entanto, por vezes estes procedimentos podem encontrar erros ou produzir avisos inesperados. Um problema comum é a mensagem "Erro 1329: Nenhum dado - zero linhas buscadas, selecionadas ou processadas".
Esse aviso geralmente aparece quando um procedimento armazenado não trata explicitamente o caso em que nenhum dado é retornado. Para resolver isso, é necessário tratar adequadamente a condição "NÃO ENCONTRADO". No MySQL, isso pode ser alcançado usando uma instrução CONTINUE HANDLER.
Considere o seguinte procedimento armazenado testing_proc:
CREATE PROCEDURE `testing_proc`()
READS SQL DATA
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE l_name VARCHAR(20);
DECLARE my_cur CURSOR FOR
SELECT name FROM customer_tbl;
OPEN my_cur;
my_cur_loop:
LOOP FETCH my_cur INTO l_name;
IF done = 1 THEN
LEAVE my_cur_loop;
END IF;
INSERT INTO names_tbl VALUES(l_name);
END LOOP my_cur_loop;
CLOSE my_cur;
END
Se este procedimento for executado sem nenhum dado na tabela customer_tbl, ele acionará o aviso "Erro 1329". Para evitar isso, podemos adicionar a seguinte instrução CONTINUE HANDLER ao final do procedimento:
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
Esta instrução diz ao MySQL para defina a variável concluída como 1 se nenhuma linha for encontrada. Isso fará com que o loop do cursor seja encerrado, evitando que o erro ocorra.
Alternativamente, também é possível ignorar o aviso adicionando uma instrução "fictícia" no final do procedimento que envolve uma tabela e é bem-sucedida, como:
SELECT name INTO l_name FROM customer_tbl LIMIT 1;
Esta instrução garantirá que uma linha seja buscada, limpando o aviso.
Manipulando corretamente a condição "NOT FOUND" ou adicionando uma instrução fictícia, pode-se eliminar o aviso "Erro 1329" em procedimentos armazenados que não retornam nenhum dado.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3