Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mengendalikan \"Ralat 1329: Tiada Data - Baris Sifar Diambil\" dalam Prosedur Tersimpan MySQL?

Bagaimana untuk Mengendalikan \"Ralat 1329: Tiada Data - Baris Sifar Diambil\" dalam Prosedur Tersimpan MySQL?

Barbara Streisand
Barbara Streisandasal
2024-10-26 14:29:30903semak imbas

How to Handle

Tiada Amaran Data dalam Prosedur Tersimpan: "Ralat 1329: Baris Sifar Diambil, Dipilih atau Diproses"

Dalam pengaturcaraan pangkalan data, prosedur tersimpan sering digunakan untuk merangkum operasi yang kompleks dan memastikan integriti data. Walau bagaimanapun, kadangkala prosedur ini mungkin menghadapi ralat atau menghasilkan amaran yang tidak dijangka. Satu isu biasa ialah mesej "Ralat 1329: Tiada data - sifar baris diambil, dipilih atau diproses".

Amaran ini biasanya muncul apabila prosedur tersimpan tidak mengendalikan kes yang tiada data dikembalikan secara eksplisit. Untuk menyelesaikannya, seseorang mesti mengendalikan keadaan "TIDAK DITEMUI" dengan betul. Dalam MySQL, ini boleh dicapai menggunakan pernyataan CONTINUE HANDLER.

Pertimbangkan prosedur tersimpan testing_proc berikut:

<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>

Jika prosedur ini berjalan tanpa sebarang data dalam jadual customer_tbl, ia akan mencetuskan amaran "Ralat 1329". Untuk mengelakkan ini, kita boleh menambah pernyataan CONTINUE HANDLER berikut pada penghujung prosedur:

<code class="sql">DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;</code>

Pernyataan ini memberitahu MySQL untuk menetapkan pembolehubah yang dilakukan kepada 1 jika tiada baris ditemui. Ini akan menyebabkan gelung kursor terkeluar, menghalang ralat daripada berlaku.

Sebagai alternatif, seseorang juga boleh memintas amaran dengan menambahkan pernyataan "dummy" pada penghujung prosedur yang melibatkan jadual dan berjaya, seperti:

<code class="sql">SELECT name INTO l_name FROM customer_tbl LIMIT 1;</code>

Pernyataan ini akan memastikan bahawa baris diambil, mengosongkan amaran.

Dengan mengendalikan keadaan "TIDAK DITEMUI" dengan betul atau menambah kenyataan palsu, seseorang boleh menghapuskan amaran "Ralat 1329" dalam prosedur tersimpan yang tidak mengembalikan sebarang data.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan \"Ralat 1329: Tiada Data - Baris Sifar Diambil\" dalam Prosedur Tersimpan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn