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

Barbara Streisand
發布: 2024-10-26 14:29:30
原創
902 人瀏覽過

How to Handle

儲存過程中無資料警告:「錯誤1329:取得、選擇或處理零行」

在資料庫程式設計中,儲存過程通常用於封裝複雜的操作並確保資料完整性。然而,有時這些過程可能會遇到錯誤或產生意外的警告。一個常見問題是「錯誤 1329:無資料 - 提取、選擇或處理零行」訊息。

當預存程序未明確處理沒有傳回資料的情況時,通常會出現此警告。為了解決這個問題,必須正確處理「NOT FOUND」情況。在 MySQL 中,這可以使用 CONTINUE HANDLER 語句來實現。

考慮以下testing_proc預存程序:

<code class="sql">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</code>
登入後複製

如果此程序在 customer_tbl 表中沒有任何資料的情況下運行,它將觸發「錯誤 1329」警告。為了防止這種情況,我們可以將以下 CONTINUE HANDLER 語句告訴 MySQL 如果沒有找到行,則將 did 變數設為 1。這將導致遊標循環退出,從而防止錯誤發生。

<code class="sql">DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;</code>
登入後複製
或者,也可以透過在涉及表的過程末尾添加一條「虛擬」語句來繞過警告,並且會成功,例如:

此語句將確保提取一行,從而清除警告。

<code class="sql">SELECT name INTO l_name FROM customer_tbl LIMIT 1;</code>
登入後複製
透過正確處理「NOT FOUND」條件或新增虛擬語句,可以消除不傳回任何資料的預存程序中的「錯誤 1329」警告。

以上是如何處理 MySQL 預存程序中的「錯誤 1329:無資料 - 取得零行」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!