Oracle PL / SQL LOOP với ví dụ

Mục lục:

Anonim

Vòng lặp là gì?

Vòng lặp cho phép một phần nhất định của mã trong chương trình được thực thi với số lần mong muốn.

Trong hướng dẫn này, chúng ta sẽ xem khái niệm vòng lặp trong PL / SQL và luồng điều khiển trong các vòng lặp. Bạn sẽ học-

  • Giới thiệu về khái niệm vòng lặp
  • Tuyên bố kiểm soát vòng lặp
  • Các loại vòng lặp trong PL / SQL
  • Câu lệnh vòng lặp cơ bản
  • Ghi nhãn các vòng lặp

Giới thiệu về khái niệm vòng lặp

Khái niệm vòng lặp cung cấp lợi thế sau đây trong mã hóa.

  • Khả năng tái sử dụng của mã
  • Giảm kích thước mã
  • Dòng điều khiển dễ dàng
  • Giảm phức tạp

Sơ đồ dưới đây cho thấy khái niệm vòng lặp theo cách hình ảnh

Trong sơ đồ trên, điều kiện vòng lặp sẽ được kiểm tra, và miễn là điều kiện vòng lặp được thỏa mãn, khối thực thi sẽ được thực thi.

Trong mỗi lần lặp, biến bộ đếm vòng lặp thực sự quyết định điều kiện của vòng lặp nên sửa đổi để điều khiển thoát khỏi vòng lặp. Trong một số trường hợp, biến đếm vòng lặp này là toán tử tăng / giảm cho một số lượng được xác định trước và trong một số trường hợp, nó là một điều kiện tìm kiếm tiếp tục thực hiện khối cho đến khi nó thỏa mãn nó.

Tuyên bố kiểm soát vòng lặp

Trước khi học khái niệm vòng lặp, bắt buộc phải học các câu lệnh điều khiển vòng lặp. Các câu lệnh điều khiển vòng lặp là những câu lệnh thực sự điều khiển luồng thực thi bên trong vòng lặp. Dưới đây là mô tả chi tiết về các câu lệnh điều khiển vòng lặp.

TIẾP TỤC

Từ khóa này sẽ gửi một chỉ dẫn đến công cụ PL / SQL mà bất cứ khi nào công cụ PL / SQL gặp từ khóa này bên trong vòng lặp, thì nó sẽ bỏ qua đoạn mã còn lại trong khối thực thi của mã và lần lặp tiếp theo sẽ bắt đầu ngay lập tức. Điều này sẽ được sử dụng chủ yếu nếu mã bên trong vòng lặp muốn được bỏ qua cho các giá trị lặp nhất định.

EXIT / EXIT KHI NÀO

Từ khóa này sẽ gửi một chỉ dẫn đến công cụ PL / SQL mà bất cứ khi nào công cụ PL / SQL gặp từ khóa này, thì nó sẽ ngay lập tức thoát khỏi vòng lặp hiện tại. Nếu công cụ PL / SQL gặp EXIT trong một vòng lặp lồng nhau, thì nó sẽ thoát ra khỏi vòng lặp mà nó đã được xác định, tức là trong một vòng lặp lồng nhau, cho EXIT trong vòng lặp bên trong sẽ chỉ thoát khỏi điều khiển từ vòng lặp bên trong nhưng không phải từ vòng ngoài. Theo sau 'EXIT WHEN' là một biểu thức cho kết quả Boolean. Nếu kết quả là TRUE, thì điều khiển sẽ EXIT.

ĐI ĐẾN

Câu lệnh này sẽ chuyển điều khiển sang câu lệnh có nhãn ("GOTO

  • Việc chuyển giao quyền điều khiển chỉ có thể được thực hiện trong các chương trình con.
  • Không thể thực hiện việc chuyển giao quyền kiểm soát từ phần xử lý ngoại lệ sang phần thực thi

Không khuyến khích sử dụng tuyên bố này trừ khi không có lựa chọn thay thế nào khác, vì việc truy xuất nguồn gốc kiểm soát mã sẽ rất khó khăn trong chương trình do việc chuyển quyền kiểm soát từ bộ phận này sang bộ phận khác.

Các loại vòng lặp trong PL / SQL

PL / SQL cung cấp ba loại vòng lặp sau

  • Câu lệnh lặp cơ bản
  • Câu lệnh vòng lặp for
  • Câu lệnh lặp While

Câu lệnh vòng lặp cơ bản

Câu lệnh lặp này là cấu trúc vòng lặp đơn giản nhất trong PL / SQL. Khối thực thi bắt đầu với từ khóa 'LOOP' và kết thúc bằng từ khóa 'END LOOP'.

Điều kiện thoát phải được đưa ra bên trong khối thực thi này để điều khiển thoát khỏi vòng lặp.

Nó cần từ khóa EXIT được đưa ra rõ ràng trong phần thực thi để thoát khỏi vòng lặp.

LOOPEND LOOP;
Giải thích cú pháp:
  • Trong cú pháp trên, từ khóa 'LOOP' đánh dấu sự bắt đầu của vòng lặp và 'END LOOP' đánh dấu sự kết thúc của vòng lặp.
  • Khối thực thi chứa tất cả mã cần được thực thi bao gồm cả điều kiện EXIT.
  • Phần thực thi có thể chứa bất kỳ câu lệnh thực thi nào.

Lưu ý: Câu lệnh lặp cơ bản không có từ khóa EXIT sẽ là một INFINITE-LOOP không bao giờ dừng lại.

Ví dụ 1 : Trong ví dụ này, chúng ta sẽ in số từ 1 đến 5 bằng cách sử dụng câu lệnh lặp cơ bản. Đối với điều đó, chúng tôi sẽ thực thi đoạn mã sau.

DECLAREa NUMBER:=1;BEGINdbms_output.put_line('Program started.');LOOPdbms_output.put_line(a);a:=a+1;EXIT WHEN a>5;END LOOP;dbms_output.put_line('Program completed');END:/

Giải thích mã:

  • Dòng mã 2 : Khai báo biến 'a' là kiểu dữ liệu 'NUMBER' và khởi tạo với giá trị '1'.
  • Dòng mã 4 : In thông báo "Chương trình đã bắt đầu".
  • Dòng mã 5: Từ khóa 'LOOP' đánh dấu sự bắt đầu của vòng lặp.
  • Dòng mã 6: In giá trị của 'a'.
  • Dòng mã 7: Tăng giá trị của 'a' lên +1.
  • Dòng mã 8: Kiểm tra xem giá trị của 'a' có lớn hơn 5 hay không.
  • Dòng mã 9: Từ khóa 'END LOOP' đánh dấu sự kết thúc của khối thực thi.
  • Đoạn mã từ dòng 6 đến dòng 8 sẽ tiếp tục thực thi cho đến khi 'a' đạt đến giá trị 6, vì điều kiện sẽ trả về TRUE và điều khiển sẽ EXIT khỏi vòng lặp.
  • Dòng mã 10: In thông báo "Chương trình đã hoàn thành"

Ghi nhãn các vòng lặp

Trong PL / SQL, các vòng lặp có thể được gắn nhãn. Nhãn phải được đặt giữa "<<" và ">>". Việc ghi nhãn các vòng lặp đặc biệt trong các mã vòng lặp lồng nhau sẽ giúp dễ đọc hơn. Nhãn có thể được đưa ra trong lệnh EXIT để thoát khỏi vòng lặp cụ thể đó. Sử dụng nhãn, điều khiển có thể được thực hiện để trực tiếp thoát khỏi vòng ngoài của các vòng lồng nhau từ bất kỳ vị trí nào bên trong các vòng, bằng cách đưa ra lệnh thoát theo sau là nhãn vòng ngoài.

<>LOOP  . <> LOOP --inner  END LOOP; . END LOOP;
Giải thích cú pháp:
  • Trong cú pháp trên, vòng lặp out có thêm một vòng lặp nữa bên trong nó.
  • '<>' và '<>' là nhãn của các vòng lặp này.

Ví dụ 1 : Trong ví dụ này, chúng ta sẽ in số bắt đầu từ 1 bằng cách sử dụng câu lệnh vòng lặp Cơ bản. Mỗi số sẽ được in bao nhiêu lần giá trị của nó. Giới hạn trên của chuỗi được cố định ở phần khai báo chương trình. Hãy để chúng tôi tìm hiểu cách chúng tôi có thể sử dụng khái niệm nhãn để đạt được điều này. Đối với điều đó, chúng tôi sẽ thực thi đoạn mã sau

DECLAREa NUMBER:=0;b NUMBER;upper-limit NUMBER :=4;BEGINdbms_output.put_line(‘Program started.' );«outerloop»‭ ‬LOOPa:=a+1;b:=l;«inner loop»LOOPEXIT outer_loop WHEN a > upper_limit;dbms_output.put_line(a);b:=b+l;EXIT inner_loop WHEN b>a;END LOOP;END LOOP;dbms_output.put_line('Program completed.');END;/

Giải thích mã:

  • Dòng mã 2-3 : Khai báo biến 'a' và 'b' là kiểu dữ liệu 'NUMBER'.
  • Dòng mã 4 : Khai báo biến 'upper_limit' là kiểu dữ liệu 'NUMBER' với giá trị '4'
  • Dòng mã 6 : In thông báo "Chương trình đã bắt đầu".
  • Dòng mã 7: Vòng lặp bên ngoài đã được gắn nhãn là "external_loop"
  • Dòng mã 9: Giá trị của 'a' được tăng thêm 1.
  • Dòng mã 11: Vòng lặp bên trong đã được gắn nhãn là "inner_loop".
  • Dòng mã 13: Điều kiện EXIT để kiểm tra xem giá trị 'a' có cao hơn giá trị 'upper_limit' hay không. Nếu không thì nó sẽ đi xa hơn, nếu không nó sẽ thoát khỏi vòng lặp bên ngoài trực tiếp.
  • Dòng mã 14: In giá trị của 'b'.
  • Dòng mã 15: Tăng giá trị của 'b' lên +1.
  • Dòng mã 16: Điều kiện EXIT để kiểm tra xem giá trị của 'b' có cao hơn 'a' hay không. Nếu vậy, nó sẽ thoát khỏi điều khiển từ vòng lặp bên trong.
  • Dòng mã 14: In thông báo "Chương trình đã hoàn thành"

Tóm lược

Vòng Vòng lặp cơ bản
Tiêu chí EXIT Thoát khi gặp từ khóa 'EXIT' trong phần thực thi
Sử dụng Tốt để sử dụng khi thoát không dựa trên bất kỳ điều kiện cụ thể nào.