Rumah > pangkalan data > tutorial mysql > Bagaimanakah saya boleh mengulangi semua baris dalam jadual MySQL menggunakan prosedur tersimpan?

Bagaimanakah saya boleh mengulangi semua baris dalam jadual MySQL menggunakan prosedur tersimpan?

Susan Sarandon
Lepaskan: 2024-11-15 06:39:02
asal
430 orang telah melayarinya

How can I iterate through all rows in a MySQL table using a stored procedure?

Menggelung Melalui Semua Baris dalam Jadual Menggunakan Prosedur

Dalam MySQL, menggelung melalui semua baris jadual memerlukan mencipta prosedur tersimpan. Prosedur membolehkan anda merangkum satu siri pernyataan SQL ke dalam satu unit dan melaksanakannya sebagai satu blok.

Mencipta Prosedur

Untuk menggelungkan semua baris jadual 'A' dan lakukan operasi tertentu, buat prosedur menggunakan yang berikut sintaks:

DROP PROCEDURE IF EXISTS ROWPERROW; -- Delete existing procedure if any

DELIMITER ;; -- Change delimiter to avoid statement-by-statement execution

CREATE PROCEDURE ROWPERROW()
BEGIN
  DECLARE n INT DEFAULT 0; -- Declare a variable to count rows
  DECLARE i INT DEFAULT 0; -- Declare a variable for looping
  SELECT COUNT(*) INTO n FROM table_A; -- Get the total number of rows
  SET i = 0; -- Initialize loop counter
  WHILE i < n DO
    -- Insert the current row into table 'B'
    INSERT INTO table_B(ID, VAL) SELECT (ID, VAL) FROM table_A LIMIT i, 1;
    SET i = i + 1; -- Increment loop counter
  END WHILE;
End;
;;

DELIMITER ; -- Reset the delimiter
Salin selepas log masuk

Menjalankan Prosedur

Setelah prosedur dibuat, ia boleh dipanggil menggunakan sintaks berikut:

CALL ROWPERROW();
Salin selepas log masuk
Salin selepas log masuk

Ini akan melaksanakan prosedur dan gelung melalui setiap baris jadual 'A', melaksanakan yang ditentukan operasi.

Contoh

Andaikan anda mempunyai dua jadual, 'A' dan 'B', dengan medan 'ID' dan 'VAL'. Prosedur berikut melingkari semua baris jadual 'A' dan menyalin data ke dalam jadual 'B':

DROP PROCEDURE IF EXISTS ROWPERROW;
DELIMITER ;;

CREATE PROCEDURE ROWPERROW()
BEGIN
  DECLARE n INT DEFAULT 0;
  DECLARE i INT DEFAULT 0;
  SELECT COUNT(*) INTO n FROM table_A;
  SET i = 0;
  WHILE i < n DO
    INSERT INTO table_B(ID, VAL) SELECT (ID, VAL) FROM table_A LIMIT i, 1;
    SET i = i + 1;
  END WHILE;
End;
;;

DELIMITER ;
Salin selepas log masuk

Untuk melaksanakan prosedur dan menyalin data, jalankan arahan berikut:

CALL ROWPERROW();
Salin selepas log masuk
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengulangi semua baris dalam jadual MySQL menggunakan prosedur tersimpan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan