«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как справиться с «Ошибкой 1329: нет данных — выбрано ноль строк» ​​в хранимых процедурах MySQL?

Как справиться с «Ошибкой 1329: нет данных — выбрано ноль строк» ​​в хранимых процедурах MySQL?

Опубликовано 7 ноября 2024 г.
Просматривать:437

How to Handle \

Предупреждение об отсутствии данных в хранимых процедурах: «Ошибка 1329: выбрано, выбрано или обработано ноль строк»

В программировании баз данных хранимые процедуры часто используются для инкапсуляции сложных операций и обеспечения целостности данных. Однако иногда эти процедуры могут вызывать ошибки или выдавать неожиданные предупреждения. Одной из распространенных проблем является сообщение «Ошибка 1329: нет данных — выбрано, выбрано или обработано ноль строк».

Это предупреждение обычно появляется, когда хранимая процедура не обрабатывает явно случай, когда данные не возвращаются. Чтобы решить эту проблему, необходимо правильно обработать условие «НЕ НАЙДЕНО». В MySQL этого можно добиться с помощью оператора CONTINUE HANDLER.

Рассмотрим следующую хранимую процедуруtest_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

Если эта процедура выполняется без каких-либо данных в таблице customer_tbl, это вызовет предупреждение «Ошибка 1329». Чтобы предотвратить это, мы можем добавить в конец процедуры следующий оператор CONTINUE HANDLER:

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

Этот оператор сообщает MySQL, что установите для переменной Done значение 1, если строки не найдены. Это приведет к завершению цикла курсора, предотвращая возникновение ошибки.

В качестве альтернативы можно также обойти предупреждение, добавив «фиктивный» оператор в конце процедуры, которая задействует таблицу и завершается успешно, например:

SELECT name INTO l_name FROM customer_tbl LIMIT 1;

Этот оператор гарантирует выборку строки, снимая предупреждение.

При правильной обработке условия «НЕ НАЙДЕНО» или добавления фиктивного оператора, можно исключить предупреждение «Ошибка 1329» в хранимых процедурах, которые не возвращают никаких данных.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3