+2

Loops in PL/SQL

Introduction to Loops Concept

Loops khái niệm cơ bản mà chúng ta luôn thấy trong các ngôn ngữ lập trình. Bằng cách sử dụng loops mà có thể duyệt qua các thành phần, hoặc lặp đi lặp lại các hành động. Thay vì cách thông thường sẽ phải viết lại các đoạn mã tương tự nhau thì chúng ta sử dụng loops.

Ưu điểm khi sử dụng loops:

  • Có thể dùng lại mã
  • Kích thước mã giảm
  • Dễ dàng kiểm soát
  • Giảm phức tạp

Biểu đồ dưới đây cho chúng ta thấy tổng quan chung về loop

110215_0850_LoopsConcep1.png

Trong sơ đồ trên, các điều kiện vòng lặp sẽ được kiểm tra, và miễn là các điều kiện vòng lặp là hài lòng, công việc tiếp theo sẽ được thực thi.

Trong mỗi lần lặp, chúng ta thường sử dụng một biến trung gian nào đó để điều khiển vòng lặp nên tiếp tục hay dừng lại hoặc các xử lý riêng biệt. Trong một số trường hợp, biến điều khiển vòng lặp này là toán tử tăng / giảm cho một số đượ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 mà tiếp tục thực hiện các khối cho đến khi nó đáp ứng được mong muốn.

Loop Control Statements

Trước khi bắt đầu các khái niệm vòng lặp, chúng ta nên biết chú ta cần phải nắm rõ được các khái niệm sau để có thể nắm rõ và kiểm soát vòng lặp. Các lệnh điều khiển vòng lặp thực sự kiểm soát các luồng thực hiện bên trong vòng lặp. Dưới đây là mô tả chi tiết về các lệnh điều khiển vòng lặp.

CONTINUE

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

EXIT / EXIT WHEN

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

GOTO

Khi sử dụng lệnh này bằng nghĩa với việc chuyển giao quyền kiểm soát đến một đối tượng được khai báo ( "GOTO <label>;"). Điều này có những hạn chế sau đây:

  • Chuyển giao kiểm soát có thể được thực hiện chỉ trong chương trình con.
  • Chuyển giao kiểm soát không thể làm được từ việc xử lý ngoại lệ một phần để các phần thi

Việc sử dụng lệnh này không được khuyến khích trừ khi không có lựa chọn nào khác, việc kiểm soát truy xuất nguồn gốc sẽ rất khó khăn trong chương trình do sự chuyển giao quyền kiểm soát từ một phần đến một phần khác.

Types of Loop in PL/SQL

Basic loop statement

Vòng lặp này là cấu trúc vòng lặp đơn giản nhất trong PL / SQL. Các khối lặp bắt đầu với từ khoá 'LOOP' và kết thúc với từ khóa 'END LOOP'. Các điều kiện cần được đưa vào bên trong khối lệnh này để kiểm soát lối ra khỏi vòng lặp. Nó cần từ khóa EXIT rõ ràng với một điều kiện nào đó để thoát ra khỏi vòng lặp.

110215_0850_LoopsConcep2.png

Syntax Explanation:

  • Trong cú pháp trên, từ khóa dấu 'LOOP' 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.
  • Các khối thi có chứa tất cả các mã mà cần phải được thực hiện bao gồm các điều kiện EXIT.
  • Các phần thực hiện có thể chứa bất ký xử lý khác nào trong đó.

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

Ví dụ: Chúng ta thực hiện từ 1-5 bằng vòng lặp cơ bản

110215_0850_LoopsConcep3.png

WHILE Loop Statement

WHILE làm việc tương tự như Basic Loop ngoại trừ các điều kiện EXIT là lúc bắt đầu của vòng lặp .

Nó hoạt động giống như (entry-check loop) trong đó khối thi thậm chí sẽ không được thực hiện một lần nếu điều kiện là không chấp thuận, điều kiện sẽ được kiểm tra trước khi thực thi. Nó không đòi hỏi từ khóa 'EXIT' một cách rõ ràng để thoát khỏi vòng lặp vì nó xác định điều kiện mặc nhiên mỗi vòng lặp.

110215_0850_LoopsConcep4.png

Syntax Explanation:

  • Trong cú pháp trên, đánh dấu từ khóa 'WHILE' 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.
  • Điều kiện EXIT được xem xét mỗi lần trước khi các phần thi được bắt đầu thực hiện.
  • Các khối xử lý có chứa tất cả các mã mà cần phải được thực thi.
  • Các phần thực hiện có thể chứa bất kỳ các xử lý khác.

Ví dụ: chúng tôi sẽ in ra số 1-5 bằng vòng lặp while, chúng ta sẽ thực thi đoạn code sau

110215_0850_LoopsConcep5.png

FOR Loop Statement

"FOR LOOP" là phù hợp nhất khi bạn muốn thực hiện một mã cho số lần gọi chứ không phải dựa trên một số điều kiện khác. Trong vòng này, giới hạn dưới và giới hạn cao hơn sẽ được quy định và miễn là các biến vòng lặp là ở giữa những dải vòng lặp sẽ được thực thi.

Biến vòng lặp là tự tăng dần, do đó không có hoạt động tăng rõ ràng là cần thiết trong vòng lặp này. Biến vòng lặp không cần phải kê khai, như nó được khai báo ngầm.

110215_0850_LoopsConcep6.png

Syntax Explanation:

  • Trong cú pháp trên, 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 của vòng lặp.
  • Biến vòng lặp được đánh giá mỗi lần trước khi thực hiện các phần được thực thi.
  • Các khối xử lý có chứa tất cả các mã mà cần phải được thực thi. Các phần thực hiện có thể chứa bất kỳ các xử lý khác.
  • Các loop_variable được khai báo ngầm trong toàn bộ vòng lặp, và phạm vi của loop_variable này sẽ chỉ có tác dụng bên trong vòng lặp này.
  • Nếu biến lặp đi ra khỏi phạm vi, sau đó điều khiển sẽ thoát khỏi vòng lặp.
  • Các vòng lặp có thể được thực hiện để làm việc theo thứ tự ngược lại bằng cách thêm từ khóa 'REVERSE' trước lower_limit.

Nested Loops

Các báo cáo vòng lặp cũng có thể được lồng vào nhau. Các vòng lặp bên ngoài và bên trong có thể có nhiều loại khác nhau. Trong vòng lặp lồng nhau, với mỗi một giá trị lặp của vòng ngoài, vòng trong sẽ được thực thi đầy đủ.

110215_0850_LoopsConcep8.png

Syntax Explanation:

  • Trong cú pháp trên, các vòng ngoài có thêm một vòng lặp bên trong nó.
  • Các vòng có thể được của bất kỳ loại và chức năng thực hiện một phần là như nhau.

Ví dụ: Chúng ta sẽ in số 1-3 bằng FOR loop. Mỗi số sẽ được in nhiều lần như giá trị của nó. Chúng ta sẽ thực thi đoạn code sau

110215_0850_LoopsConcep9.png

Labelling of Loops

Trong PL / SQL, các vòng có thể được dán nhãn. Nhãn cần được đính kèm giữa "<<"">>". Việc ghi nhãn của các vòng đặc biệt trong mã vòng lặp lồng nhau sẽ cung cấp cho dễ đọc hơn. Các 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, kiểm soát có thể được thực hiện trực tiếp thoát khỏi vòng lặp bên ngoài của các vòng lặp lồng nhau từ bất cứ nơi nào bên trong các vòng, bằng cách đưa ra lệnh cảnh tiếp theo bên ngoài nhãn loop.

110215_0850_LoopsConcep11.png

Syntax Explanation:

  • Trong cú pháp trên, vòng ra có thêm một vòng lặp bên trong nó.
  • Các '<< OUTER_LOOP >>''<< INNER_LOOP >>' là nhãn của các vòng.

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

110215_0850_LoopsConcep12.png

Summary

Trong bài này, tôi đã giới thiệu khái niệm loops concept, different types of loops, nested loops and labeling of loops. Các bạn có thể áp dụng vòng lặp trong việc truy xuất dữ liệu trực tiếp trên trình quản lý script.

Các bạn có thể thao khảo thêm ở http://www.guru99.com/loops-pl-sql.html


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.