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.

  • 🔢 Tốt nhất cho: Vòng lặp FOR phù hợp với số lần lặp đã biết hơn là với điều kiện không giới hạn.
  • 📏 Phạm vi: Giới hạn dưới và giới hạn trên xác định số lần vòng lặp chạy.
  • ⚙️ Bộ đếm ngầm: Biến vòng lặp được khai báo tự động và tự tăng lên.
  • 🎯 Phạm vi: Biến vòng lặp chỉ tồn tại bên trong vòng lặp.
  • 🔄 ĐẢO NGƯỢC: Thêm lệnh REVERSE trước giới hạn dưới sẽ làm cho vòng lặp đếm ngược.
  • 🪜 Lồng nhau: Các vòng lặp có thể lồng nhau, và vòng lặp bên trong sẽ chạy hết toàn bộ chu kỳ cho mỗi lần lặp bên ngoài.
  • 🚪 Tự động thoát: Vòng lặp tự động kết thúc khi biến vượt quá phạm vi cho phép.

Oracle Vòng lặp For trong PL/SQL

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.

Vòng lặp FOR in các số từ 1 đến 5

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.

Cấu trúc vòng lặp lồng nhau

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ó.

Ví dụ về vòng lặp FOR lồng nhau phần 1

Ví dụ về vòng lặp FOR lồng nhau phần 2

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.

Câu Hỏi Thường Gặp

Không. Vòng lặp FOR khai báo biến một cách ngầm định, và biến đó chỉ tồn tại bên trong vòng lặp. Việc khai báo một biến có cùng tên bên ngoài không ảnh hưởng đến biến được sử dụng bởi vòng lặp.

Lệnh REVERSE làm cho vòng lặp lặp từ giới hạn trên xuống giới hạn dưới. Các giới hạn vẫn được viết từ thấp đến cao; chỉ có thứ tự các giá trị được duyệt qua bị đảo ngược.

Sử dụng vòng lặp FOR khi số lần lặp đã được biết trước, ví dụ như một phạm vi cố định. Sử dụng vòng lặp WHILE khi vòng lặp cần tiếp tục miễn là một điều kiện được thỏa mãn và số lần lặp không cố định.

Đúng vậy, khi vòng lặp cơ bản chỉ đơn giản là đếm giữa hai giá trị cố định. AI có thể thay thế bộ đếm thủ công và lệnh EXIT bằng một vòng lặp FOR, giúp mã ngắn gọn hơn. Hãy xác nhận các giới hạn khớp với giá trị ban đầu.

Không. Biến vòng lặp chỉ có thể đọc bên trong vòng lặp, vì vậy việc gán giá trị cho nó sẽ gây ra lỗi biên dịch. Để thay đổi luồng thực thi, hãy sử dụng một biến riêng biệt hoặc thoát khỏi vòng lặp bằng lệnh EXIT.

Tóm tắt bài viết này với: