Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ลูปใน Stored Procedure ของ MySQL (REPEAT UNTIL)

สร้าง Stored Procedure แบบ REPEAT UNTIL

mysql> DELIMITER //
mysql> CREATE PROCEDURE do_WhileDemo(LastValue INT)
    -> BEGIN
    ->     SET @loop = 0;
    ->     REPEAT
    ->         SET @loop = @loop + 1;
    ->         SELECT @loop;
    ->     UNTIL @loop > LastValue
    ->     END REPEAT;
    -> END //
Query OK, 0 rows affected (0.17 sec)
mysql> DELIMITER ;

เรียกใช้ Stored Procedure

mysql> CALL do_WhileDemo(10);

ผลลัพธ์ (แสดงค่า 1 ถึง 11)

+-------+
| @loop |
+-------+
| 1     |
+-------+
1 row in set (0.00 sec)
... (ซ้ำจนถึง 11)
+-------+
| @loop |
+-------+
| 11    |
+-------+
1 row in set (0.09 sec)
Query OK, 0 rows affected (0.10 sec)

โครงสร้างลูปใน MySQL

ลูปรูปแบบตรวจสอบเงื่อนไข
WHILEWHILE condition DO ... END WHILEก่อนเข้าลูป (pre-test)
REPEATREPEAT ... UNTIL condition END REPEATหลังรันลูปแล้ว (post-test) - รันอย่างน้อย 1 ครั้ง
LOOPLOOP ... END LOOPไม่มีเงื่อนไข ต้องใช้ LEAVE

ตัวอย่าง WHILE LOOP

CREATE PROCEDURE while_demo(max_val INT)
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE i <= max_val DO
        SELECT i;
        SET i = i + 1;
    END WHILE;
END

ตัวอย่าง LOOP + LEAVE

CREATE PROCEDURE loop_demo(max_val INT)
BEGIN
    DECLARE i INT DEFAULT 1;
    my_loop: LOOP
        IF i > max_val THEN
            LEAVE my_loop;
        END IF;
        SELECT i;
        SET i = i + 1;
    END LOOP;
END

คำแนะนำ

  • ใช้ DELIMITER // ก่อนสร้าง procedure และ DELIMITER ; หลังเสร็จ
  • ใช้ DECLARE สำหรับตัวแปร local (ไม่ต้องมี @)
  • ใช้ LEAVE label_name เพื่อออกจากลูปก่อนเวลา
  • ใช้ ITERATE label_name เพื่อข้ามรอบปัจจุบันไปรอบถัดไป