"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como lidar com "Erro 1329: Nenhum dado - Zero linhas buscadas" em procedimentos armazenados do MySQL?

Como lidar com "Erro 1329: Nenhum dado - Zero linhas buscadas" em procedimentos armazenados do MySQL?

Publicado em 2024-11-07
Navegar:932

How to Handle \

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.

Tutorial mais recente Mais>

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