在預存程序中無資料警告:「錯誤1329:取得、選擇或處理零行」
在資料庫程式設計中,預存程序通常用於封裝複雜的操作並確保資料完整性。然而,有時這些過程可能會遇到錯誤或產生意外的警告。一個常見問題是「錯誤 1329:無資料 - 提取、選擇或處理零行」訊息。
當預存程序未明確處理沒有傳回資料的情況時,通常會出現此警告。為了解決這個問題,必須正確處理「NOT FOUND」情況。在 MySQL 中,這可以使用 CONTINUE HANDLER 語句來實現。
考慮以下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
如果此程序在 customer_tbl 表中沒有任何資料的情況下運行,則會觸發「錯誤 1329」警告。為了防止這種情況,我們可以在過程末尾添加以下CONTINUE HANDLER 語句:
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
該語句告訴MySQL如果找不到行,則將did 變數設為1。這將導致遊標循環退出,從而防止錯誤發生。
或者,也可以透過在涉及表的過程末尾添加一條「虛擬」語句來繞過警告,並且會成功,如:
SELECT name INTO l_name FROM customer_tbl LIMIT 1;
該語句將確保取得一行,清除警告。
透過正確處理透過「NOT FOUND」條件或新增虛擬語句,可以消除不傳回任何資料的預存程序中的「Error 1329」警告。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3