Kenneth Leroy Busbee và Dave Braunschweig
Tổng quan
Trong các cấu trúc điều khiển lặp, một câu lệnh hoặc khối được thực thi cho đến khi chương trình đạt đến một trạng thái nhất định hoặc các hoạt động đã được áp dụng cho mọi yếu tố của một bộ sưu tập. Điều này thường được thể hiện bằng các từ khóa như
IF sales > quota THEN compute_bonus[empid]; UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id; END IF;8,
IF sales > quota THEN compute_bonus[empid]; UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id; END IF;9,
IF x > y THEN high := x; END IF;0 hoặc ________ 61. [1]iteration control structures, a statement or block is executed until the program reaches a certain state, or operations have been applied to every element of a collection. This is usually expressed with keywords such as
IF sales > quota THEN compute_bonus[empid]; UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id; END IF;8,
IF sales > quota THEN compute_bonus[empid]; UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id; END IF;9,
IF x > y THEN high := x; END IF;0, or
IF x > y THEN high := x; END IF;1.[1]
Thảo luận
Thuộc tính cơ bản của cấu trúc điều khiển lặp là có thể lặp lại một số dòng mã. Hiển thị trực quan của phép lặp tạo ra một mẫu vòng tròn khi được lưu trữ, do đó, từ vòng lặp lặp được liên kết với các cấu trúc điều khiển lặp. Lặp lại có thể được thực hiện bằng & nbsp; kiểm tra trước các vòng, kiểm tra sau các vòng lặp và đếm các vòng. Một câu hỏi sử dụng các khái niệm Boolean thường kiểm soát tần suất vòng lặp sẽ thực thi.
Cấu trúc điều khiển lặp lại [lặp lại]
Mã giả: Trong khi
count assigned zero While count < 5 Display "I love computers!" Increment count End
Mã giả: làm trong khi
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero
Mã giả: lặp lại cho đến khi
count assigned five Repeat Display "Blast off is soon!" Decrement count Until count < one
Mã giả: cho
For x starts at 0, x < 5, increment x Display "Are we having fun?" End
Người giới thiệu
- CNX.org: Nguyên tắc cơ bản lập trình - Một cách tiếp cận có cấu trúc mô -đun bằng cách sử dụng C ++
Một con tàu lái xe về phía đông và một người khác lái xe về phía tây bằng những cơn gió tự thổi. --Ella Wheeler Wilcox
Chương này chỉ cho bạn cách cấu trúc luồng điều khiển thông qua chương trình PL/SQL. Bạn tìm hiểu làm thế nào các câu lệnh được kết nối bởi các cấu trúc điều khiển đơn giản nhưng mạnh mẽ có một điểm nhập và điểm thoát duy nhất. Nói chung, các cấu trúc này có thể xử lý mọi tình huống. Việc sử dụng đúng cách của họ dẫn tự nhiên đến một chương trình có cấu trúc tốt.
Chủ đề chínhTổng quan Điều khiểnTổng quan
Theo định lý cấu trúc, bất kỳ chương trình máy tính nào cũng có thể được viết bằng các cấu trúc điều khiển cơ bản được hiển thị trong Hình & NBSP; 3-1. Chúng có thể được kết hợp theo bất kỳ cách nào cần thiết để đối phó với một vấn đề nhất định.
Hình 3-1 Cấu trúc điều khiển
Cấu trúc lựa chọn kiểm tra một điều kiện, sau đó thực thi một chuỗi các câu lệnh thay vì một chuỗi khác, tùy thuộc vào điều kiện là đúng hay sai. Một điều kiện là bất kỳ biến hoặc biểu thức nào trả về giá trị boolean [
IF x > y THEN high := x; END IF;2 hoặc
IF x > y THEN high := x; END IF;3]. Cấu trúc lặp thực hiện một chuỗi các câu lệnh liên tục miễn là một điều kiện đúng. Cấu trúc trình tự chỉ đơn giản thực hiện một chuỗi các câu lệnh theo thứ tự chúng xảy ra.
Kiểm soát có điều kiện: Nếu các câu lệnh
Thông thường, cần phải thực hiện các hành động thay thế tùy thuộc vào hoàn cảnh. Câu lệnh
IF x > y THEN high := x; END IF;4 cho phép bạn thực hiện một chuỗi các câu lệnh một cách có điều kiện. Đó là, liệu trình tự được thực thi hay không phụ thuộc vào giá trị của một điều kiện. Có ba hình thức của
IF x > y THEN high := x; END IF;4 tuyên bố:
IF x > y THEN high := x; END IF;6,
IF x > y THEN high := x; END IF;7 và
IF x > y THEN high := x; END IF;8.
If-thì
Hình thức đơn giản nhất của câu lệnh
IF x > y THEN high := x; END IF;4 liên kết một điều kiện với một chuỗi các câu lệnh được bao quanh bởi các từ khóa
IF condition THEN sequence_of_statements1 ELSE sequence_of_statements2 END IF;0 và
IF condition THEN sequence_of_statements1 ELSE sequence_of_statements2 END IF;1
IF x > y THEN high := x; END IF;4 [không phải
IF condition THEN sequence_of_statements1 ELSE sequence_of_statements2 END IF;3], như sau:
IF condition THEN sequence_of_statements END IF;
Trình tự các câu lệnh chỉ được thực thi nếu điều kiện là đúng. Nếu điều kiện là sai hoặc null, câu lệnh
IF x > y THEN high := x; END IF;4 không làm gì cả. Trong cả hai trường hợp, kiểm soát chuyển sang câu lệnh tiếp theo. Một ví dụ sau:
IF sales > quota THEN compute_bonus[empid]; UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id; END IF;
Bạn có thể muốn đặt các câu lệnh
IF x > y THEN high := x; END IF;4 ngắn trên một dòng, như trong
IF x > y THEN high := x; END IF;
If-Then-Else
Hình thức thứ hai của câu lệnh
IF x > y THEN high := x; END IF;4 thêm từ khóa
IF condition THEN sequence_of_statements1 ELSE sequence_of_statements2 END IF;7 theo sau là một chuỗi các câu lệnh thay thế, như sau:
IF condition THEN sequence_of_statements1 ELSE sequence_of_statements2 END IF;
Trình tự các câu lệnh trong mệnh đề
IF condition THEN sequence_of_statements1 ELSE sequence_of_statements2 END IF;7 chỉ được thực thi nếu điều kiện là sai hoặc null. Do đó, mệnh đề
IF condition THEN sequence_of_statements1 ELSE sequence_of_statements2 END IF;7 đảm bảo rằng một chuỗi các câu lệnh được thực thi. Trong ví dụ sau, câu lệnh
IF trans_type = 'CR' THEN UPDATE accounts SET balance = balance + credit WHERE ... ELSE UPDATE accounts SET balance = balance - debit WHERE ... END IF;0 đầu tiên được thực thi khi điều kiện là đúng, nhưng câu lệnh
IF trans_type = 'CR' THEN UPDATE accounts SET balance = balance + credit WHERE ... ELSE UPDATE accounts SET balance = balance - debit WHERE ... END IF;0 thứ hai được thực thi khi điều kiện là sai hoặc null:
IF trans_type = 'CR' THEN UPDATE accounts SET balance = balance + credit WHERE ... ELSE UPDATE accounts SET balance = balance - debit WHERE ... END IF;
Các mệnh đề
IF condition THEN sequence_of_statements1 ELSE sequence_of_statements2 END IF;0 và
IF condition THEN sequence_of_statements1 ELSE sequence_of_statements2 END IF;7 có thể bao gồm các câu lệnh
IF x > y THEN high := x; END IF;4. Đó là, các câu lệnh
IF x > y THEN high := x; END IF;4 có thể được lồng, như ví dụ sau đây cho thấy:
IF trans_type = 'CR' THEN UPDATE accounts SET balance = balance + credit WHERE ... ELSE IF new_balance >= minimum_balance THEN UPDATE accounts SET balance = balance - debit WHERE ... ELSE RAISE insufficient_funds; END IF; END IF;
IF-THEN-ELEF
Đôi khi bạn muốn chọn một hành động từ một số lựa chọn thay thế loại trừ lẫn nhau. Hình thức thứ ba của câu lệnh
IF x > y THEN high := x; END IF;4 sử dụng từ khóa
IF trans_type = 'CR' THEN UPDATE accounts SET balance = balance + credit WHERE ... ELSE UPDATE accounts SET balance = balance - debit WHERE ... END IF;7 [không phải
IF trans_type = 'CR' THEN UPDATE accounts SET balance = balance + credit WHERE ... ELSE UPDATE accounts SET balance = balance - debit WHERE ... END IF;8] để giới thiệu các điều kiện bổ sung, như sau:
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero0
Nếu điều kiện đầu tiên là sai hoặc null, mệnh đề
IF trans_type = 'CR' THEN UPDATE accounts SET balance = balance + credit WHERE ... ELSE UPDATE accounts SET balance = balance - debit WHERE ... END IF;7 kiểm tra một điều kiện khác. Một tuyên bố
IF x > y THEN high := x; END IF;4 có thể có bất kỳ số lượng của
IF trans_type = 'CR' THEN UPDATE accounts SET balance = balance + credit WHERE ... ELSE UPDATE accounts SET balance = balance - debit WHERE ... END IF;7; Điều khoản
IF condition THEN sequence_of_statements1 ELSE sequence_of_statements2 END IF;7 cuối cùng là tùy chọn. Điều kiện được đánh giá từng cái một từ trên xuống dưới. Nếu bất kỳ điều kiện nào là đúng, chuỗi các câu lệnh liên quan của nó được thực thi và kiểm soát chuyển sang câu lệnh tiếp theo. Nếu tất cả các điều kiện là sai hoặc null, chuỗi trong mệnh đề
IF condition THEN sequence_of_statements1 ELSE sequence_of_statements2 END IF;7 được thực thi. Xem xét ví dụ sau:
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero1
Nếu giá trị của
IF trans_type = 'CR' THEN UPDATE accounts SET balance = balance + credit WHERE ... ELSE IF new_balance >= minimum_balance THEN UPDATE accounts SET balance = balance - debit WHERE ... ELSE RAISE insufficient_funds; END IF; END IF;4 lớn hơn 50000, điều kiện thứ nhất và thứ hai là đúng. Tuy nhiên,
IF trans_type = 'CR' THEN UPDATE accounts SET balance = balance + credit WHERE ... ELSE IF new_balance >= minimum_balance THEN UPDATE accounts SET balance = balance - debit WHERE ... ELSE RAISE insufficient_funds; END IF; END IF;5 được gán giá trị thích hợp là 1500 vì điều kiện thứ hai không bao giờ được kiểm tra. Khi điều kiện đầu tiên là đúng, câu lệnh liên quan của nó được thực thi và kiểm soát chuyển sang câu lệnh
IF trans_type = 'CR' THEN UPDATE accounts SET balance = balance + credit WHERE ... ELSE IF new_balance >= minimum_balance THEN UPDATE accounts SET balance = balance - debit WHERE ... ELSE RAISE insufficient_funds; END IF; END IF;6.
Hướng dẫn
Tránh vụng về
IF x > y THEN high := x; END IF;4 như những câu trong ví dụ sau:
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero2
Mã này coi thường hai sự thật hữu ích. Đầu tiên, giá trị của biểu thức boolean có thể được gán trực tiếp cho biến boolean. Vì vậy, bạn có thể thay thế câu lệnh
IF x > y THEN high := x; END IF;4 đầu tiên bằng một bài tập đơn giản, như sau:
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero3
Thứ hai, một biến boolean là chính nó đúng hoặc sai. Vì vậy, bạn có thể đơn giản hóa điều kiện trong câu lệnh
IF x > y THEN high := x; END IF;4 thứ hai, như sau:
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero4
Khi có thể, hãy sử dụng mệnh đề
IF trans_type = 'CR' THEN UPDATE accounts SET balance = balance + credit WHERE ... ELSE UPDATE accounts SET balance = balance - debit WHERE ... END IF;7 thay vì các câu lệnh
IF x > y THEN high := x; END IF;4 lồng nhau. Bằng cách đó, mã của bạn sẽ dễ đọc và hiểu hơn. So sánh các câu
IF x > y THEN high := x; END IF;4 sau:
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero5
Các tuyên bố này là tương đương về mặt logic, nhưng câu lệnh đầu tiên che khuất dòng logic, trong khi câu lệnh thứ hai cho thấy nó.
Điều khiển lặp: Các câu lệnh LOOP và EXIT
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03 Các câu lệnh cho phép bạn thực hiện một chuỗi các câu lệnh nhiều lần. Có ba hình thức của
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03 tuyên bố:
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03,
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero06 và
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero07.
VÒNG
Hình thức đơn giản nhất của câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03 là vòng lặp cơ bản [hoặc vô hạn], bao gồm một chuỗi các câu lệnh giữa các từ khóa
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03 và
IF condition THEN sequence_of_statements1 ELSE sequence_of_statements2 END IF;1
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03, như sau:
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero6
Với mỗi lần lặp của vòng lặp, chuỗi các câu lệnh được thực thi, sau đó điều khiển tiếp tục ở đầu vòng lặp. Nếu xử lý thêm là không mong muốn hoặc không thể, bạn có thể sử dụng câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero12 để hoàn thành vòng lặp. Bạn có thể đặt một hoặc nhiều câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero12 ở bất cứ đâu bên trong một vòng lặp, nhưng không nơi nào bên ngoài một vòng lặp. Có hai hình thức của các câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero12:
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero12 và
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero16.
LỐI RA
Tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero12 buộc một vòng lặp hoàn toàn vô điều kiện. Khi gặp một tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero12, vòng lặp hoàn thành ngay lập tức và kiểm soát chuyển sang câu lệnh tiếp theo. Một ví dụ sau:
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero7
Ví dụ tiếp theo cho thấy rằng bạn không thể sử dụng câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero12 để hoàn thành khối PL/SQL:
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero8
Hãy nhớ rằng, câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero12 phải được đặt bên trong một vòng lặp. Để hoàn thành khối PL/SQL trước khi đạt được kết thúc bình thường, bạn có thể sử dụng câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero21. Để biết thêm thông tin, hãy xem "Sử dụng câu lệnh trả về".
Thoát khỏi khi
Tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero16 cho phép một vòng lặp hoàn thành có điều kiện. Khi câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero12 gặp phải, điều kiện trong mệnh đề
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero24 được đánh giá. Nếu điều kiện là đúng, vòng lặp hoàn thành và điều khiển chuyển sang câu lệnh tiếp theo sau vòng lặp. Một ví dụ sau:
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero9
Cho đến khi điều kiện là đúng, vòng lặp không thể hoàn thành. Vì vậy, một câu lệnh bên trong vòng lặp phải thay đổi giá trị của điều kiện. Trong ví dụ cuối cùng, nếu câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero25 trả về một hàng, điều kiện là sai. Khi câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero25 không trả lại một hàng, điều kiện là đúng, vòng lặp hoàn thành và điều khiển chuyển đến câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero27.
Tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero16 thay thế một câu lệnh
IF x > y THEN high := x; END IF;4 đơn giản. Ví dụ: so sánh các câu sau:
count assigned five Repeat Display "Blast off is soon!" Decrement count Until count < one0
Những câu này tương đương về mặt logic, nhưng câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero16 dễ đọc và hiểu hơn.
Nhãn vòng lặp
Giống như các khối PL/SQL, các vòng có thể được dán nhãn. Nhãn, một mã định danh không được khai báo được đặt bởi giá đỡ góc kép, phải xuất hiện ở đầu câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03, như sau:
count assigned five Repeat Display "Blast off is soon!" Decrement count Until count < one1
Tùy chọn, tên nhãn cũng có thể xuất hiện ở cuối câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03, như ví dụ sau đây cho thấy:
count assigned five Repeat Display "Blast off is soon!" Decrement count Until count < one2
Khi bạn làm tổ các vòng lặp được dán nhãn, bạn có thể sử dụng tên nhãn kết thúc để cải thiện khả năng đọc.
Với một trong hai hình thức của câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero12, bạn có thể hoàn thành không chỉ vòng lặp hiện tại mà còn bất kỳ vòng lặp bao quanh. Chỉ cần dán nhãn vòng lặp kèm theo mà bạn muốn hoàn thành. Sau đó, sử dụng nhãn trong câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero12, như sau:
count assigned five Repeat Display "Blast off is soon!" Decrement count Until count < one3
Mỗi vòng lặp kèm theo và bao gồm các vòng lặp được dán nhãn được thoát.
TRONG KHI LẶP LẠI
Tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero06 liên kết một điều kiện với một chuỗi các câu lệnh được bao quanh bởi các từ khóa
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03 và
IF condition THEN sequence_of_statements1 ELSE sequence_of_statements2 END IF;1
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03, như sau:
count assigned five Repeat Display "Blast off is soon!" Decrement count Until count < one4
Trước mỗi lần lặp của vòng lặp, điều kiện được đánh giá. Nếu điều kiện là đúng, chuỗi các câu lệnh được thực thi, thì điều khiển tiếp tục ở đầu vòng lặp. Nếu điều kiện là sai hoặc null, vòng lặp được bỏ qua và điều khiển chuyển sang câu lệnh tiếp theo. Một ví dụ sau:
count assigned five Repeat Display "Blast off is soon!" Decrement count Until count < one5
Số lần lặp phụ thuộc vào điều kiện và không xác định cho đến khi vòng lặp hoàn thành. Điều kiện được kiểm tra ở đầu vòng lặp, vì vậy trình tự có thể thực thi 0 lần. Trong ví dụ cuối cùng, nếu giá trị ban đầu của
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero39 lớn hơn 25000, điều kiện là sai và vòng lặp bị bỏ qua.
Một số ngôn ngữ có cấu trúc
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero41 hoặc
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero42
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero41, kiểm tra điều kiện ở dưới cùng của vòng lặp thay vì ở trên cùng. Do đó, chuỗi các câu lệnh được thực hiện ít nhất một lần. PL/SQL không có cấu trúc như vậy, nhưng bạn có thể dễ dàng xây dựng một cấu trúc, như sau:
count assigned five Repeat Display "Blast off is soon!" Decrement count Until count < one6
Để đảm bảo rằng vòng lặp
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero44 thực thi ít nhất một lần, hãy sử dụng biến Boolean được khởi tạo trong điều kiện, như sau:
count assigned five Repeat Display "Blast off is soon!" Decrement count Until count < one7
Một câu lệnh bên trong vòng lặp phải gán một giá trị mới cho biến boolean. Nếu không, bạn có một vòng lặp vô hạn. Ví dụ: các câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03 sau đây tương đương về mặt logic:
count assigned five Repeat Display "Blast off is soon!" Decrement count Until count < one8
Cho vòng lặp
Trong khi số lần lặp qua vòng lặp
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero44 không được biết cho đến khi vòng lặp hoàn thành, số lần lặp qua vòng lặp
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero47 được biết đến trước khi vòng lặp được nhập.
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero47 Vòng lặp lặp qua một phạm vi số nguyên cụ thể. . Một dấu chấm kép [
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero52] đóng vai trò là toán tử phạm vi. Cú pháp sau:
count assigned five Repeat Display "Blast off is soon!" Decrement count Until count < one9
Phạm vi được đánh giá khi vòng lặp
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero47 được nhập lần đầu tiên và không bao giờ được đánh giá lại.
Như ví dụ tiếp theo cho thấy, chuỗi các câu lệnh được thực hiện một lần cho mỗi số nguyên trong phạm vi. Sau mỗi lần lặp, bộ đếm vòng được tăng lên.
For x starts at 0, x < 5, increment x Display "Are we having fun?" End0
Ví dụ sau đây cho thấy rằng nếu giới hạn dưới bằng giới hạn cao hơn, chuỗi các câu lệnh được thực thi một lần:
For x starts at 0, x < 5, increment x Display "Are we having fun?" End1
Theo mặc định, việc lặp lại tiến lên từ giới hạn dưới đến giới hạn cao hơn. Tuy nhiên, như ví dụ dưới đây cho thấy, nếu bạn sử dụng từ khóa
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero54, việc lặp lại sẽ giảm xuống từ giới hạn cao hơn đến giới hạn dưới. Sau mỗi lần lặp, bộ đếm vòng được giảm. Tuy nhiên, bạn viết các giới hạn phạm vi theo thứ tự tăng dần [không giảm dần].
For x starts at 0, x < 5, increment x Display "Are we having fun?" End2
Bên trong vòng lặp
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero47, bộ đếm vòng lặp có thể được tham chiếu giống như một hằng số nhưng không thể được gán các giá trị, như ví dụ sau đây cho thấy:
For x starts at 0, x < 5, increment x Display "Are we having fun?" End3
Các sơ đồ lặp
Các giới hạn của một phạm vi vòng có thể là chữ, biến hoặc biểu thức nhưng phải đánh giá theo số. Mặt khác, PL/SQL tăng ngoại lệ được xác định trước
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero56. Giới hạn thấp hơn không cần phải là 1, như các ví dụ dưới đây cho thấy. Tuy nhiên, mức tăng bộ đếm vòng [hoặc giảm] phải là 1.
For x starts at 0, x < 5, increment x Display "Are we having fun?" End4
Trong nội bộ, PL/SQL gán các giá trị của các giới hạn cho các biến
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero57 tạm thời và nếu cần, làm tròn các giá trị vào số nguyên gần nhất. Phạm vi cường độ của A
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero57 là -2 ** 31 .. 2 ** 31. Vì vậy, nếu một ràng buộc đánh giá với một số bên ngoài phạm vi đó, bạn sẽ gặp lỗi tràn số khi PL/SQL thử gán, như ví dụ sau đây cho thấy:
For x starts at 0, x < 5, increment x Display "Are we having fun?" End5
Một số ngôn ngữ cung cấp một mệnh đề
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero59, cho phép bạn chỉ định một mức tăng khác [5 thay vì 1 chẳng hạn]. PL/SQL không có cấu trúc như vậy, nhưng bạn có thể dễ dàng xây dựng một cấu trúc. Bên trong vòng
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero47, chỉ cần nhân mỗi tham chiếu với bộ đếm vòng lặp với mức tăng mới. Trong ví dụ sau, bạn gán ngày hôm nay cho các phần tử 5, 10 và 15 của bảng chỉ mục:
For x starts at 0, x < 5, increment x Display "Are we having fun?" End6
Phạm vi động
PL/SQL cho phép bạn xác định phạm vi vòng lặp động tại thời gian chạy, như ví dụ sau đây cho thấy:
For x starts at 0, x < 5, increment x Display "Are we having fun?" End7
Giá trị của
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero61 không rõ tại thời điểm biên dịch; Câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero62 trả về giá trị tại thời gian chạy.
Điều gì xảy ra nếu giới hạn dưới của phạm vi vòng đánh giá là một số nguyên lớn hơn giới hạn trên? Như ví dụ tiếp theo cho thấy, chuỗi các câu lệnh trong vòng lặp không được thực thi và kiểm soát chuyển sang câu lệnh tiếp theo:
For x starts at 0, x < 5, increment x Display "Are we having fun?" End8
Quy tắc phạm vi
Bộ đếm vòng chỉ được xác định trong vòng lặp. Bạn không thể tham khảo nó bên ngoài vòng lặp. Sau khi vòng lặp được thoát, bộ đếm vòng không được xác định, như ví dụ sau đây cho thấy:
For x starts at 0, x < 5, increment x Display "Are we having fun?" End9
Bạn không cần phải khai báo rõ ràng bộ đếm vòng lặp vì nó được tuyên bố ngầm là một biến cục bộ của loại
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero63. Ví dụ tiếp theo cho thấy tuyên bố địa phương che giấu bất kỳ tuyên bố toàn cầu nào:
IF condition THEN sequence_of_statements END IF;0
Để tham khảo biến toàn cầu trong ví dụ này, bạn phải sử dụng ký hiệu nhãn và dấu chấm, như sau:
IF condition THEN sequence_of_statements END IF;1
Các quy tắc phạm vi tương tự áp dụng cho các vòng lặp
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero47 lồng nhau. Xem xét ví dụ dưới đây. Cả hai bộ đếm vòng có cùng tên. Vì vậy, để tham khảo bộ đếm vòng ngoài từ vòng lặp bên trong, bạn phải sử dụng một nhãn và ký hiệu dấu chấm, như sau:
IF condition THEN sequence_of_statements END IF;2
Sử dụng câu lệnh thoát
Câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero12 cho phép vòng lặp
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero47 hoàn thành sớm. Ví dụ: vòng lặp sau thường thực hiện mười lần, nhưng ngay khi câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero25 không trả lại một hàng, vòng lặp hoàn thành cho dù nó có thực thi bao nhiêu lần:
IF condition THEN sequence_of_statements END IF;3
Giả sử bạn phải thoát khỏi một vòng lặp
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero47 sớm. Bạn có thể hoàn thành không chỉ vòng lặp hiện tại, mà bất kỳ vòng lặp bao quanh. Chỉ cần dán nhãn vòng lặp kèm theo mà bạn muốn hoàn thành. Sau đó, sử dụng nhãn trong câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero12 để chỉ định vòng lặp
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero47 nào để thoát, như sau:
IF condition THEN sequence_of_statements END IF;4
Kiểm soát tuần tự: Các câu lệnh Goto và Null
Không giống như các câu lệnh
IF x > y THEN high := x; END IF;4 và
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03, các câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 và
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero74 không quan trọng đối với lập trình PL/SQL. Cấu trúc của PL/SQL sao cho câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 hiếm khi cần thiết. Đôi khi, nó có thể đơn giản hóa logic đủ để đảm bảo việc sử dụng nó. Tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero74 có thể cải thiện khả năng đọc bằng cách đưa ra ý nghĩa và hành động của các tuyên bố có điều kiện rõ ràng.
Việc lạm dụng các câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 có thể dẫn đến mã phức tạp, không cấu trúc [đôi khi được gọi là mã spaghetti] khó hiểu và duy trì. Vì vậy, sử dụng các câu
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 một cách tiết kiệm. Ví dụ, để phân nhánh từ một cấu trúc được lồng sâu sang một thói quen xử lý lỗi, hãy nêu một ngoại lệ thay vì sử dụng câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73.
Tuyên bố Goto
Tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 nhánh cho một nhãn vô điều kiện. Nhãn phải là duy nhất trong phạm vi của nó và phải đi trước một câu lệnh thực thi hoặc khối PL/SQL. Khi được thực thi, câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 chuyển kiểm soát sang câu lệnh hoặc khối được dán nhãn. Trong ví dụ sau, bạn đi đến một câu lệnh thực thi xa hơn trong một chuỗi các câu lệnh:
IF condition THEN sequence_of_statements END IF;5
Trong ví dụ tiếp theo, bạn đi đến một khối PL/SQL xa hơn theo một chuỗi các câu lệnh:
IF condition THEN sequence_of_statements END IF;6
Nhãn
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero82 trong ví dụ sau là bất hợp pháp vì nó không đi trước tuyên bố thực thi:
IF condition THEN sequence_of_statements END IF;7
Để gỡ lỗi ví dụ cuối cùng, chỉ cần thêm câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero74, như sau:
IF condition THEN sequence_of_statements END IF;8
Như ví dụ sau đây cho thấy, câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 có thể phân nhánh thành một khối kèm theo từ khối hiện tại:
IF condition THEN sequence_of_statements END IF;9
Câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 nhánh đến khối kèm theo đầu tiên trong đó nhãn được tham chiếu xuất hiện.
Những hạn chế
Một số điểm đến có thể của một tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 là bất hợp pháp. Cụ thể, một câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 không thể phân nhánh thành một câu lệnh
IF x > y THEN high := x; END IF;4, tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero03 hoặc khối phụ. Ví dụ: tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 sau đây là bất hợp pháp:
IF sales > quota THEN compute_bonus[empid]; UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id; END IF;0
Ngoài ra, một câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 không thể phân nhánh từ mệnh đề câu lệnh
IF x > y THEN high := x; END IF;4 này sang điều khoản khác, như ví dụ sau đây cho thấy:
IF sales > quota THEN compute_bonus[empid]; UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id; END IF;1
Ví dụ tiếp theo cho thấy một câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 không thể phân nhánh từ một khối kèm theo thành một khối phụ:
IF sales > quota THEN compute_bonus[empid]; UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id; END IF;2
Ngoài ra, một tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 không thể phân nhánh ra khỏi một chương trình con, như ví dụ sau đây cho thấy:
IF sales > quota THEN compute_bonus[empid]; UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id; END IF;3
Cuối cùng, một câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 không thể phân nhánh từ một trình xử lý ngoại lệ vào khối hiện tại. Ví dụ: tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 sau đây là bất hợp pháp:
IF sales > quota THEN compute_bonus[empid]; UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id; END IF;4
Tuy nhiên, một câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero73 có thể phân nhánh từ một trình xử lý ngoại lệ thành một khối kèm theo.
Tuyên bố NULL
Tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero74 chỉ định rõ ràng không hành động; Nó không làm gì khác ngoài việc vượt qua kiểm soát cho tuyên bố tiếp theo. Nó có thể, tuy nhiên, cải thiện khả năng đọc. Trong một cấu trúc cho phép các hành động thay thế, câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero74 đóng vai trò là người giữ chỗ. Nó nói với độc giả rằng sự thay thế liên quan đã không bị bỏ qua, nhưng thực sự không có hành động nào là cần thiết. Trong ví dụ sau, câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero74 cho thấy không có hành động nào được thực hiện cho các trường hợp ngoại lệ không tên:
IF sales > quota THEN compute_bonus[empid]; UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id; END IF;5
Mỗi mệnh đề trong một câu lệnh
IF x > y THEN high := x; END IF;4 phải chứa ít nhất một câu lệnh thực thi. Tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero74 có thể thực thi, vì vậy bạn có thể sử dụng nó trong các mệnh đề tương ứng với các trường hợp không có hành động nào được thực hiện. Trong ví dụ sau, tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero74 nhấn mạnh rằng chỉ những nhân viên được xếp hạng hàng đầu nhận được tiền thưởng:
IF sales > quota THEN compute_bonus[empid]; UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id; END IF;6
Ngoài ra, tuyên bố
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero74 là một cách tiện dụng để tạo sơ khai khi thiết kế các ứng dụng từ trên xuống. Một sơ đồ con là một chương trình con giả cho phép bạn trì hoãn định nghĩa về quy trình hoặc chức năng cho đến khi bạn kiểm tra và gỡ lỗi chương trình chính. Trong ví dụ sau, câu lệnh
count assigned five Do Display "Blast off is soon!" Decrement count While count > zero74 đáp ứng yêu cầu rằng ít nhất một câu lệnh phải xuất hiện trong phần thực thi của chương trình con:
IF sales > quota THEN compute_bonus[empid]; UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id; END IF;7