Предупреждение об отсутствии данных в хранимых процедурах: «Ошибка 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