」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何處理 MySQL 預存程序中的「錯誤 1329:無資料 - 取得零行」?

如何處理 MySQL 預存程序中的「錯誤 1329:無資料 - 取得零行」?

發佈於2024-11-07
瀏覽:880

How to Handle \

在預存程序中無資料警告:「錯誤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