Oracle PL/SQL FOR LOOP kèm ví dụ
⚡ Tóm tắt thông minh
Oracle Vòng lặp FOR trong PL/SQL thực thi một khối mã một số lần đã biết giữa một giới hạn dưới và một giới hạn trên. Biến vòng lặp được khai báo ngầm và tự tăng, vì vậy không cần bộ đếm thủ công, và từ khóa REVERSE cho phép vòng lặp đếm ngược.

Vòng lặp FOR là gì?
Câu lệnh “FOR LOOP” phù hợp nhất khi bạn muốn thực thi mã một số lần đã biết, chứ không phải dựa trên một điều kiện nào khác.
Trong vòng lặp này, một giới hạn dưới và một giới hạn trên được xác định, và miễn là biến vòng lặp nằm trong khoảng này, vòng lặp sẽ được thực thi.
Biến vòng lặp tự tăng, do đó không cần thực hiện thao tác tăng rõ ràng. Biến vòng lặp không cần được khai báo, vì nó được khai báo ngầm định.
FOR <loop_variable> in <lower_limit> .. <higher_limit> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
Giải thích cú pháp:
- Từ khóa 'FOR' đánh dấu sự bắt đầu của vòng lặp và 'END LOOP' đánh dấu sự kết thúc.
- Biến vòng lặp được đánh giá mỗi lần trước khi thực thi phần mã lệnh.
- Khối thực thi chứa tất cả mã cần chạy và có thể chứa bất kỳ câu lệnh thực thi nào.
- Biến loop_variable được khai báo ngầm định trong quá trình thực thi vòng lặp, và phạm vi của nó chỉ nằm bên trong vòng lặp.
- Khi biến vòng lặp vượt quá phạm vi cho phép, chương trình sẽ thoát khỏi vòng lặp.
- Có thể làm cho vòng lặp hoạt động theo thứ tự ngược lại bằng cách thêm từ khóa 'REVERSE' trước lower_limit.
Ví dụ 1: Trong ví dụ này, chúng ta in các số từ 1 đến 5 bằng cách sử dụng vòng lặp FOR.
BEGIN dbms_output.put_line('Program started.'); FOR a IN 1 .. 5 LOOP dbms_output.put_line(a); END LOOP; dbms_output.put_line('Program completed.'); END; /
Code Giải thích:
- Code dòng 2: In ra thông báo “Chương trình đã bắt đầu”.
- Code dòng 3: Từ khóa 'FOR' đánh dấu sự bắt đầu của vòng lặp và biến vòng lặp 'a' được khai báo. Biến này hiện nhận các giá trị từ 1 đến 5.
- Code dòng 5: In giá trị của 'a'.
- Code dòng 6: Từ khóa 'END LOOP' đánh dấu sự kết thúc của khối thực thi.
- Dòng 5 tiếp tục thực thi cho đến khi 'a' đạt giá trị 6, tại thời điểm đó điều kiện không còn đúng và vòng lặp kết thúc.
- Code dòng 7: In ra thông báo “Chương trình đã hoàn thành”.
Vòng lồng nhau
Các câu lệnh vòng lặp cũng có thể lồng nhau. Vòng lặp ngoài và vòng lặp trong có thể thuộc các kiểu khác nhau. Trong một vòng lặp lồng nhau, cứ mỗi lần lặp của vòng lặp ngoài, vòng lặp trong sẽ thực thi hoàn toàn.
LOOP --outer <execution block starts> LOOP --inner <execution_part> END LOOP; <execution_block_ends> END LOOP;
Giải thích cú pháp:
- Vòng ngoài có thêm một vòng nhỏ bên trong.
- Các vòng lặp có thể thuộc bất kỳ loại nào, và chức năng thực thi vẫn giống nhau.
Ví dụ 1: Trong ví dụ này, chúng ta in các số từ 1 đến 3 bằng cách sử dụng câu lệnh vòng lặp FOR. Mỗi số được in ra số lần bằng chính giá trị của nó.
DECLARE b NUMBER; BEGIN dbms_output.put_line('Program started'); FOR a IN 1..3 LOOP b:= 1; WHILE (a>=b) LOOP dbms_output.put_line(a); b:= b+1; END LOOP; END LOOP; dbms_output.put_line('Program completed'); END; /
Code Giải thích:
- Code dòng 2: Khai báo biến 'b' có kiểu dữ liệu là 'NUMBER'.
- Code dòng 4: In ra thông báo “Chương trình đã bắt đầu”.
- Code dòng 5: Từ khóa 'FOR' đánh dấu sự bắt đầu của vòng lặp và biến vòng lặp 'a' được khai báo. Biến này hiện nhận các giá trị từ 1 đến 3.
- Code dòng 7: Đặt lại giá trị của 'b' thành '1' mỗi lần.
- Code dòng 8: Bên trong trong khi lặp lại kiểm tra điều kiện a>=b.
- Code dòng 10: In giá trị của 'a' miễn là điều kiện trên được thỏa mãn.
- Code dòng 14: In ra thông báo “Chương trình đã hoàn thành”.
Vòng lặp FOR và vòng lặp FOR đảo ngược
Theo mặc định, vòng lặp FOR đếm tăng dần từ giới hạn dưới đến giới hạn trên. Thêm từ khóa REVERSE sẽ làm cho nó đếm giảm dần trong khi vẫn giữ nguyên giới hạn dưới.ping Các giới hạn theo cùng thứ tự. Cả hai dạng đều được hiển thị cùng nhau bên dưới để sự khác biệt được rõ ràng.
| Mẫu | Tiêu đề | Thứ tự các giá trị |
|---|---|---|
| Tăng dần | CHO MỘT TRONG 1 .. 5 | 1, 2, 3, 4, 5 |
| Giảm dần | CHO A THEO CHIỀU NGƯỢC LẠI 1 .. 5 | 5, 4, 3, 2, 1 |
Lưu ý rằng ngay cả với lệnh REVERSE, giới hạn dưới vẫn được ghi trước giới hạn trên; chỉ có hướng lặp thay đổi. Đối với các vòng lặp mà số lần lặp không được biết trước, vòng lặp cơ bản là sự lựa chọn tốt hơn.




