Vòng lặp while
Cú pháp của vòng lặp while:
Mã:
WHILE expression DO
Statements
END WHILE
Đầu
tiên, vòng lặp while kiểm tra biểu thức điều kiện, nếu điều kiện có giá
trị true thì chương trình sẽ thực thi các lệnh trong vòng lặp. Vòng lặp
while kiểm tra biểu thức trước khi thực thi các dòng lệnh. Dưới đây là 1
ví dụ về việc sử dụng vòng lặp while trong stored procedure:
Mã:
DELIMITER $$
DROP PROCEDURE IF EXISTS WhileLoopProc$$
CREATE PROCEDURE WhileLoopProc()
BEGIN
DECLARE x INT;
DECLARE str VARCHAR(255);
SET x = 1;
SET str = '';
WHILE x <= 5 DO SET str = CONCAT(str,x,','); SET x = x + 1; END WHILE; SELECT str; END$$ DELIMITER ;
Stored
procedures trên tạo 1 chuỗi thông qua biến x cho đến khi x lớn hơn 5 và
sau đó in chuỗi này ra màng hình bằng phát biểu select. 1 trong những
lỗi mà lập trình viên hay mắc phải là biến x được dùng mà chưa được khởi
tạo, giá trị của x lúc đó là NULL, vì vậy điều kiện lặp luôn luôn đúng,
kết quả là đoạn mã bên trong vòng lặp while thực thi liên tục cho đến
khi database của bạn bị crashed.
Vòng lặp repeat
Cú pháp của vòng lặp repeat:
Mã:
REPEAT
Statements;
UNTIL expression
END REPEAT
Dòng
lệnh đầu tiên được thực thi, sau đó chương trình mới kiểm tra tới biểu
thức logic. Nếu biểu thức logic có giá trị true, các dòng lệnh bên trong
sẽ được lập lại liên tục cho đến khi biểu thức logic có giá trị false.
Vì vòng lặp repeat kiểm tra biểu thức logic sau khi đã thực thi 1 lần
dòng lệnh nên repeat được biết như vòng lặp tiền kiểm tra (post-test
loop). Chúng ta có thể viết lại stored procedure trên bằng vòng lặp
repeat như sau:
Mã:
DELIMITER $$
DROP PROCEDURE IF EXISTS RepeatLoopProc$$
CREATE PROCEDURE RepeatLoopProc()
BEGIN
DECLARE x INT;
DECLARE str VARCHAR(255);
SET x = 1;
SET str = '';
REPEAT
SET str = CONCAT(str,x,',');
SET x = x + 1;
UNTIL x > 5
END REPEAT;
SELECT str;
END$$
DELIMITER ;
Chú ký không có delimiter (;) sau phát biểu UNTIL
Vòng lặp loop, leave và iterate
Phát biểu leave cho phép bạn rời vòng lặp. Nó gần giống với phát biểu break trong các ngôn ngữ khác như Java, C#...
Phát biểu Iterate cho phép bạn bắt đầu vòng lặp trở lại. Nó gần giống như phát biểu continue trong Java hay C#.
MySql cũng hỗ trợ vòng lặp loop cho phép bạn thực thi dòng lệnh lặp 1 cách cơ động. Một ví dụ về vòng lặp loop
Mã:
DELIMITER $$
DROP PROCEDURE IF EXISTS LOOPLoopProc$$
CREATE PROCEDURE LOOPLoopProc()
BEGIN
DECLARE x INT;
DECLARE str VARCHAR(255);
SET x = 1;
SET str = '';
loop_label: LOOP
IF x > 10 THEN
LEAVE loop_label;
END IF;
SET x = x + 1;
IF (x mod 2) THEN
ITERATE loop_label;
ELSE
SET str = CONCAT(str,x,',');
END IF;
END LOOP;
SELECT str;
END$$
Store
procedure trên tạo dựng 1 chuỗi với các số chẵn. Đầu tiên, ta định
nghĩa một nhãn loop, nếu biến x lớn hơn 10 thì vòng lặp kết thúc thông
qua phát biểu leave. Nếu x lẻ, iterate sẽ bỏ qua các dòng lệnh bên dưới
nó và tiếp tục vòng lặp mới, ngược lại, block code trong phát biểu else
sẽ thực thi để tạo chuỗi với các số chẵn.
Nhận xét
Đăng nhận xét