Cú pháp REPEAT ... UNTIL
DELIMITER //
CREATE PROCEDURE ten_thu_tuc(LastValue INT)
BEGIN
SET @loop = 0;
REPEAT
SET @loop = @loop + 1;
SELECT @loop;
UNTIL @loop > LastValue
END REPEAT;
END //
DELIMITER ;
Gọi thủ tục
mysql> CALL do_WhileDemo(10);
Kết quả (11 dòng vì điều kiện > LastValue)
+-------+ | @loop | +-------+ | 1 | +-------+ ... +-------+ | 11 | +-------+
Phân tích logic
- Khởi tạo
@loop = 0 - Lặp: tăng @loop, in ra, kiểm tra điều kiện
UNTIL @loop > LastValue: Dừng khi @loop > 10- Vì kiểm tra SAU khi thực thi → in từ 1 đến 11
Các loại vòng lặp trong MySQL
| Loại | Kiểm tra điều kiện | Phù hợp |
|---|---|---|
| REPEAT ... UNTIL | Sau khi chạy (đảm bảo chạy ít nhất 1 lần) | Luôn cần chạy 1 lần |
| WHILE ... DO ... END WHILE | Trước khi chạy | Có thể không chạy lần nào |
| LOOP ... END LOOP | Không có điều kiện (dùng LEAVE/ITERATE) | Logic phức tạp, thoát nhiều điểm |
Ví dụ WHILE
CREATE PROCEDURE whileDemo(n INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= n DO
SELECT i;
SET i = i + 1;
END WHILE;
END
Lưu ý: Dùng biến cục bộ DECLARE trong SP, tránh biến session @var để tránh rò rỉ giữa các lần gọi.