Các loại cấu trúc lặp khác nhau được phép trong python

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 cách các câu lệnh được kết nối bằng các cấu trúc điều khiển đơn giản nhưng mạnh mẽ có một điểm vào và điểm ra 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 hợp lý của chúng dẫn đến một chương trình có cấu trúc tốt một cách tự nhiên.

Chủ đề chính

Tổ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 chỉ ra trong. Chúng có thể được kết hợp theo bất kỳ cách nào cần thiết để giải quyết 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 hiện một chuỗi các câu lệnh thay vì một câu lệnh khác, tùy thuộc vào điều kiện đó là đúng hay sai. Điều kiện là bất kỳ biến hoặc biểu thức nào trả về giá trị Boolean [

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 hoặc
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ấu trúc lặp thực hiện một chuỗi các câu lệnh lặp đi lặp lại miễn là điều kiện còn đúng. Cấu trúc trình tự chỉ đơn giản là thực hiện một chuỗi các câu lệnh theo thứ tự mà chúng xảy ra

Kiểm soát có điều kiện. Câu lệnh IF

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 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 cho phép bạn thực hiện một chuỗi các câu lệnh có điều kiện. Tức là dãy có được thực hiện 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 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.
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;
8,
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;
9 và
IF condition1 THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

0

NẾU-THÌ

Dạng đơn giản nhất của 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 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 condition1 THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

2 và
IF condition1 THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

3
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 [không phải
IF condition1 THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

5], như sau

IF condition THEN
   sequence_of_statements
END IF;

Chuỗi các câu lệnh chỉ được thực hiện nếu điều kiện là đúng. Nếu điều kiện là sai hoặc không, 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 không làm gì cả. Trong cả hai trường hợp, điều khiển 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 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 ngắn gọn trên một dòng, như trong

IF x > y THEN high := x; END IF;

NẾU-THÌ-KHÔNG

Dạng thứ hai của 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 thêm từ khóa
IF condition1 THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

9 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;

Chuỗi các câu lệnh trong mệnh đề

IF condition1 THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

9 chỉ được thực hiện nếu điều kiện là sai hoặc không. Như vậy, mệnh đề
IF condition1 THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

9 đả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
BEGIN
   ...
   IF sales > 50000 THEN
      bonus := 1500;
   ELSIF sales > 35000 THEN
      bonus := 500;
   ELSE
      bonus := 100;
   END IF;
   INSERT INTO payroll VALUES [emp_id, bonus, ...];
END;

2 đầu tiên được thực thi khi điều kiện là đúng, nhưng câu lệnh
BEGIN
   ...
   IF sales > 50000 THEN
      bonus := 1500;
   ELSIF sales > 35000 THEN
      bonus := 500;
   ELSE
      bonus := 100;
   END IF;
   INSERT INTO payroll VALUES [emp_id, bonus, ...];
END;

2 thứ hai được thực hiện khi điều kiện là sai hoặc không

IF trans_type = 'CR' THEN
   UPDATE accounts SET balance = balance + credit WHERE ...
ELSE
   UPDATE accounts SET balance = balance - debit WHERE ...
END IF;

Mệnh đề

IF condition1 THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

2 và
IF condition1 THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

9 có thể bao gồm 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. Nghĩa là, các 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 có thể được lồng vào nhau, như ví dụ sau 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;

NẾU-THEN-ELSIF

Đô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. Dạng thứ ba của 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 sử dụng từ khóa
BEGIN
   ...
   IF sales > 50000 THEN
      bonus := 1500;
   ELSIF sales > 35000 THEN
      bonus := 500;
   ELSE
      bonus := 100;
   END IF;
   INSERT INTO payroll VALUES [emp_id, bonus, ...];
END;

9 [không phải
DECLARE
   ...
   overdrawn  BOOLEAN;
BEGIN
   ...
   IF new_balance < minimum_balance THEN
      overdrawn := TRUE;
   ELSE
      overdrawn := FALSE;
   END IF;
   ...
   IF overdrawn = TRUE THEN
      RAISE insufficient_funds;
   END IF;
END;

0] để đưa ra các điều kiện bổ sung, như sau

IF condition1 THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

Nếu điều kiện đầu tiên là sai hoặc không, mệnh đề

BEGIN
   ...
   IF sales > 50000 THEN
      bonus := 1500;
   ELSIF sales > 35000 THEN
      bonus := 500;
   ELSE
      bonus := 100;
   END IF;
   INSERT INTO payroll VALUES [emp_id, bonus, ...];
END;

9 sẽ kiểm tra một điều kiện khác. Một 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 có thể có bất kỳ số lượng
BEGIN
   ...
   IF sales > 50000 THEN
      bonus := 1500;
   ELSIF sales > 35000 THEN
      bonus := 500;
   ELSE
      bonus := 100;
   END IF;
   INSERT INTO payroll VALUES [emp_id, bonus, ...];
END;

9 mệnh đề nào; . Các đ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âu lệnh liên quan của nó sẽ được thực thi và quyền điều khiển sẽ 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 không, trình tự trong mệnh đề
IF condition1 THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

9 được thực hiện. Xem xét ví dụ sau

BEGIN
   ...
   IF sales > 50000 THEN
      bonus := 1500;
   ELSIF sales > 35000 THEN
      bonus := 500;
   ELSE
      bonus := 100;
   END IF;
   INSERT INTO payroll VALUES [emp_id, bonus, ...];
END;

Nếu giá trị của

DECLARE
   ...
   overdrawn  BOOLEAN;
BEGIN
   ...
   IF new_balance < minimum_balance THEN
      overdrawn := TRUE;
   ELSE
      overdrawn := FALSE;
   END IF;
   ...
   IF overdrawn = TRUE THEN
      RAISE insufficient_funds;
   END IF;
END;

6 lớn hơn 50000, thì điều kiện thứ nhất và thứ hai là đúng. Tuy nhiên,
DECLARE
   ...
   overdrawn  BOOLEAN;
BEGIN
   ...
   IF new_balance < minimum_balance THEN
      overdrawn := TRUE;
   ELSE
      overdrawn := FALSE;
   END IF;
   ...
   IF overdrawn = TRUE THEN
      RAISE insufficient_funds;
   END IF;
END;

7 đượ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à quyền điều khiển được chuyển đến câu lệnh
DECLARE
   ...
   overdrawn  BOOLEAN;
BEGIN
   ...
   IF new_balance < minimum_balance THEN
      overdrawn := TRUE;
   ELSE
      overdrawn := FALSE;
   END IF;
   ...
   IF overdrawn = TRUE THEN
      RAISE insufficient_funds;
   END IF;
END;

8

hướng dẫn

Tránh các 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 vụng về như trong ví dụ sau

DECLARE
   ...
   overdrawn  BOOLEAN;
BEGIN
   ...
   IF new_balance < minimum_balance THEN
      overdrawn := TRUE;
   ELSE
      overdrawn := FALSE;
   END IF;
   ...
   IF overdrawn = TRUE THEN
      RAISE insufficient_funds;
   END IF;
END;

Mã này bỏ qua hai sự thật hữu ích. Đầu tiên, giá trị của một biểu thức Boolean có thể được gán trực tiếp cho một biến Boolean. Vì vậy, bạn có thể thay thế 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 đầu tiên bằng một phép gán đơn giản, như sau

overdrawn := new_balance < minimum_balance;

Thứ hai, một biến Boolean tự nó là đú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 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 thứ hai, như sau

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

0

Khi có thể, hãy sử dụng mệnh đề

BEGIN
   ...
   IF sales > 50000 THEN
      bonus := 1500;
   ELSIF sales > 35000 THEN
      bonus := 500;
   ELSE
      bonus := 100;
   END IF;
   INSERT INTO payroll VALUES [emp_id, bonus, ...];
END;

9 thay vì các 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 lồng nhau. Bằng cách đó, mã của bạn sẽ dễ đọc và dễ hiểu hơn. So sánh các 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 sau đây

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

1

Các câu lệnh này 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 tiết lộ nó

Kiểm soát lặp đi lặp lại. Câu lệnh LOOP và EXIT

overdrawn := new_balance < minimum_balance;

5 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 câu lệnh
overdrawn := new_balance < minimum_balance;

5.
overdrawn := new_balance < minimum_balance;

5,
overdrawn := new_balance < minimum_balance;

8 và
overdrawn := new_balance < minimum_balance;

9

VÒNG

Dạng đơn giản nhất của câu lệnh

overdrawn := new_balance < minimum_balance;

5 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
overdrawn := new_balance < minimum_balance;

5 và
IF condition1 THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

3
overdrawn := new_balance < minimum_balance;

5, như sau

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

2

Với mỗi lần lặp lại của vòng lặp, chuỗi các câu lệnh được thực thi, sau đó điều khiển sẽ tiếp tục ở đầu vòng lặp. Nếu việc xử lý tiếp theo là không mong muốn hoặc không thể, bạn có thể sử dụng câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

04 để hoàn thành vòng lặp. Bạn có thể đặt một hoặc nhiều câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

04 ở bất kỳ đâu bên trong vòng lặp, nhưng không ở bên ngoài vòng lặp. Có hai dạng câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

04.
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

04 và
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

08

LỐI RA

Câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

04 buộc một vòng lặp hoàn thành vô điều kiện. Khi gặp câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

04, vòng lặp hoàn thành ngay lập tức và quyền điều khiển 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;

3

Ví dụ tiếp theo cho thấy bạn không thể sử dụng câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

04 để hoàn thành một khối PL/SQL

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

4

Hãy nhớ rằng, câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

04 phải được đặt bên trong một vòng lặp. Để hoàn thành khối PL/SQL trước khi kết thúc thông thường, bạn có thể sử dụng câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

13. Để biết thêm thông tin, xem

THOÁT-KHI

Câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

08 cho phép một vòng lặp hoàn thành có điều kiện. Khi gặp câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

04, điều kiện trong mệnh đề
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

16 đượ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

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

5

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ụ trước, nếu câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

17 trả về một hàng, thì điều kiện là sai. Khi câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

17 không trả về một hàng, điều kiện là đúng, vòng lặp hoàn thành và quyền điều khiển được chuyển tới câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

19

Câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

08 thay thế một 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 đơn giản. Ví dụ, so sánh các tuyên bố sau

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

6

Những câu lệnh này tương đương về mặt logic, nhưng câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

08 dễ đọc và dễ hiểu hơn

Nhãn vòng lặp

Giống như các khối PL/SQL, các vòng lặp có thể được gắn nhãn. Nhãn, một mã định danh không khai báo được đặt trong dấu ngoặc nhọn kép, phải xuất hiện ở đầu câu lệnh

overdrawn := new_balance < minimum_balance;

5, như sau

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

7

Theo tùy chọn, tên nhãn cũng có thể xuất hiện ở cuối câu lệnh

overdrawn := new_balance < minimum_balance;

5, 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;

8

Khi bạn lồng các vòng lặp có 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 dạng câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

04, 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 kèm theo nào. 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
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

04, như sau

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

9

Mọi vòng lặp kèm theo cho đến và bao gồm cả vòng lặp được dán nhãn đều bị thoát

TRONG KHI LẶP LẠI

Câu lệnh

overdrawn := new_balance < minimum_balance;

8 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
overdrawn := new_balance < minimum_balance;

5 và
IF condition1 THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

3
overdrawn := new_balance < minimum_balance;

5, như sau

IF x > y THEN high := x; END IF;
0

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, sau đó điều khiển sẽ tiếp tục ở đầu vòng lặp. Nếu điều kiện là sai hoặc null, vòng lặp sẽ bị bỏ qua và quyền điều khiển sẽ chuyển sang câu lệnh tiếp theo. Một ví dụ sau

IF x > y THEN high := x; END IF;
1

Số lần lặp phụ thuộc vào điều kiện và không xác định cho đến khi hoàn thành vòng lặp. Điều kiện được kiểm tra ở đầu vòng lặp, vì vậy trình tự có thể thực hiện không lần nào. Trong ví dụ trước, nếu giá trị ban đầu của

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

31 lớn hơn 25000, thì đ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

overdrawn := new_balance < minimum_balance;

5
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

33 hoặc
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

34
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

33, kiểm tra điều kiện ở cuối vòng lặp thay vì ở trên cùng. Do đó, dãy 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

IF x > y THEN high := x; END IF;
2

Để đảm bảo rằng vòng lặp

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

36 thực hiện ít nhất một lần, hãy sử dụng biến Boolean đã khởi tạo trong điều kiện, như sau

IF x > y THEN high := x; END IF;
3

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

overdrawn := new_balance < minimum_balance;

5 sau đây tương đương về mặt logic

IF x > y THEN high := x; END IF;
4

FOR-LOOP

Trong khi số lần lặp qua vòng lặp

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

36 là không xác định cho đến khi vòng lặp hoàn thành, thì số lần lặp qua vòng lặp
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

39 được biết trước khi vòng lặp được nhập.
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

39 vòng lặp lặp lại trên một phạm vi số nguyên được chỉ định. [Con trỏ
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

39 vòng lặp, lặp qua tập kết quả của con trỏ, được thảo luận trong. ] Phạm vi là một phần của sơ đồ lặp, được bao quanh bởi các từ khóa
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

39 và
overdrawn := new_balance < minimum_balance;

5. Dấu chấm kép [
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

44] đóng vai trò là toán tử phạm vi. Cú pháp sau

IF x > y THEN high := x; END IF;
5

Phạm vi được đánh giá khi vòng lặp

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

39 đượ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 lặp được tăng lên

IF x > y THEN high := x; END IF;
6

Ví dụ sau đây cho thấy rằng nếu giới hạn dưới bằng giới hạn trên, chuỗi các câu lệnh được thực hiện một lần

IF x > y THEN high := x; END IF;
7

Theo mặc định, quá trình lặp đi lên từ giới hạn dưới lên giới hạn cao hơn. Tuy nhiên, như ví dụ bên dưới cho thấy, nếu bạn sử dụng từ khóa

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

46, quá trình lặp sẽ tiếp tục đi xuống từ giới hạn trên xuống giới hạn dưới. Sau mỗi lần lặp, bộ đếm vòng lặp giảm đi. Tuy nhiên, bạn viết giới hạn phạm vi theo thứ tự tăng dần [không giảm dần]

IF x > y THEN high := x; END IF;
8

Bên trong vòng lặp

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

39, bộ đếm vòng lặp có thể được tham chiếu như một hằng số nhưng không thể được gán giá trị, như ví dụ sau đây cho thấy

IF x > y THEN high := x; END IF;
9

Sơ đồ lặp

Các giới hạn của phạm vi vòng lặp có thể là chữ, biến hoặc biểu thức nhưng phải đánh giá bằng số. Mặt khác, PL/SQL tăng ngoại lệ được xác định trước

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

48. Giới hạn dưới không nhất thiết phải là 1, như các ví dụ dưới đây cho thấy. Tuy nhiên, số tăng [hoặc giảm] của bộ đếm vòng lặp phải là 1

IF condition THEN
   sequence_of_statements1
ELSE
   sequence_of_statements2
END IF;

0

Bên trong, PL/SQL gán các giá trị của các giới hạn cho các biến tạm thời

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

49 và, nếu cần, làm tròn các giá trị thành số nguyên gần nhất. Phạm vi cường độ của một
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

49 là -2**31. 2**31. Vì vậy, nếu một giới hạn đánh giá một số nằm 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

IF condition THEN
   sequence_of_statements1
ELSE
   sequence_of_statements2
END IF;

1

Một số ngôn ngữ cung cấp mệnh đề

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

51, cho phép bạn chỉ định một mức tăng khác [ví dụ: 5 thay vì 1]. PL/SQL không có cấu trúc như vậy, nhưng bạn có thể dễ dàng tạo một cấu trúc như vậy. Bên trong vòng lặp
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

39, chỉ cần nhân từng tham chiếu đến bộ đếm vòng lặp với số gia mới. Trong ví dụ sau, bạn chỉ định ngày hôm nay cho các thành phần 5, 10 và 15 của bảng chỉ mục

IF condition THEN
   sequence_of_statements1
ELSE
   sequence_of_statements2
END IF;

2

Phạm vi động

PL/SQL cho phép bạn xác định phạm vi vòng lặp một cách linh hoạt trong thời gian chạy, như ví dụ sau đây cho thấy

IF condition THEN
   sequence_of_statements1
ELSE
   sequence_of_statements2
END IF;

3

Giá trị của

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

53 không xác định tại thời điểm biên dịch;

Điều gì xảy ra nếu giới hạn dưới của phạm vi vòng lặp ước tính thành một số nguyên lớn hơn giới hạn trên?

IF condition THEN
   sequence_of_statements1
ELSE
   sequence_of_statements2
END IF;

4

Quy tắc phạm vi

Bộ đếm vòng lặp chỉ được xác định trong vòng lặp. Bạn không thể tham chiếu nó bên ngoài vòng lặp. Sau khi thoát khỏi vòng lặp, bộ đếm vòng lặp không được xác định, như ví dụ sau cho thấy

IF condition THEN
   sequence_of_statements1
ELSE
   sequence_of_statements2
END IF;

5

Bạn không cần khai báo rõ ràng bộ đếm vòng lặp vì nó được khai báo ngầm dưới dạng một biến cục bộ kiểu

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

55. Ví dụ tiếp theo cho thấy khai báo cục bộ ẩn bất kỳ khai báo toàn cục nào

IF condition THEN
   sequence_of_statements1
ELSE
   sequence_of_statements2
END IF;

6

Để tham chiếu biến toàn cục 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_statements1
ELSE
   sequence_of_statements2
END IF;

7

Các quy tắc phạm vi tương tự áp dụng cho các vòng lặp

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

39 lồng nhau. Hãy xem xét ví dụ dưới đây. Cả hai bộ đếm vòng lặp đều có cùng tên. Vì vậy, để tham chiếu bộ đếm vòng lặp bên ngoài từ vòng lặp bên trong, bạn phải sử dụng ký hiệu nhãn và dấu chấm, như sau

IF condition THEN
   sequence_of_statements1
ELSE
   sequence_of_statements2
END IF;

8

Sử dụng câu lệnh EXIT

Câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

04 cho phép vòng lặp
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

39 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
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

17 không trả về một hàng, vòng lặp sẽ hoàn thành bất kể nó đã thực hiện bao nhiêu lần

IF condition THEN
   sequence_of_statements1
ELSE
   sequence_of_statements2
END IF;

9

Giả sử bạn phải thoát khỏi vòng lặp

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

39 lồng nhau 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 kèm theo nào. 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
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

04 để chỉ định vòng lặp
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

39 nào sẽ thoát, như sau

IF trans_type = 'CR' THEN
   UPDATE accounts SET balance = balance + credit WHERE ...
ELSE
   UPDATE accounts SET balance = balance - debit WHERE ...
END IF;

0

Điều khiển tuần tự. Câu lệnh GOTO và NULL

Không giống như 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 và
overdrawn := new_balance < minimum_balance;

5, câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 và
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

66 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
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 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ó. Câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

66 có thể cải thiện khả năng đọc bằng cách làm rõ ý nghĩa và hành động của câu lệnh điều kiện

Việc lạm dụng các câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 có thể dẫn đến mã phức tạp, không có cấu trúc [đôi khi được gọi là mã spaghetti] khó hiểu và khó bảo trì. Vì vậy, hãy sử dụng ít câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65. Ví dụ: để phân nhánh từ cấu trúc lồng sâu sang quy trình xử lý lỗi, hãy đưa ra một ngoại lệ thay vì sử dụng câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65

Tuyên bố GOTO

Câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 rẽ nhánh vô điều kiện. Nhãn phải là duy nhất trong phạm vi của nó và phải đứng trước câu lệnh thực thi hoặc khối PL/SQL. Khi được thực thi, câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 chuyển quyền điều khiển sang câu lệnh hoặc khối được gắn nhãn. Trong ví dụ sau, bạn chuyển đến một câu lệnh thực thi ở phía dưới trong một chuỗi các 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;

1

Trong ví dụ tiếp theo, bạn chuyển đến một khối PL/SQL xa hơn trong một chuỗi các 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;

2

Nhãn

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

74 trong ví dụ sau là bất hợp pháp vì nó không đứng trước câu lệnh thực thi

IF trans_type = 'CR' THEN
   UPDATE accounts SET balance = balance + credit WHERE ...
ELSE
   UPDATE accounts SET balance = balance - debit WHERE ...
END IF;

3

Để gỡ lỗi ví dụ cuối cùng, chỉ cần thêm câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

66, như sau

IF trans_type = 'CR' THEN
   UPDATE accounts SET balance = balance + credit WHERE ...
ELSE
   UPDATE accounts SET balance = balance - debit WHERE ...
END IF;

4

Như ví dụ sau cho thấy, một câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 có thể phân nhánh thành một khối bao quanh từ khối hiện tại

IF trans_type = 'CR' THEN
   UPDATE accounts SET balance = balance + credit WHERE ...
ELSE
   UPDATE accounts SET balance = balance - debit WHERE ...
END IF;

5

Câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 rẽ nhánh tới khối bao quanh đầu tiên trong đó nhãn được tham chiếu xuất hiện

Những hạn chế

Một số đích đến có thể có của một tuyên bố

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 là bất hợp pháp. Cụ thể, câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 không thể phân nhánh thành 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, câu lệnh
overdrawn := new_balance < minimum_balance;

5 hoặc khối con. Ví dụ: câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 sau đây là bất hợp pháp

IF trans_type = 'CR' THEN
   UPDATE accounts SET balance = balance + credit WHERE ...
ELSE
   UPDATE accounts SET balance = balance - debit WHERE ...
END IF;

6

Ngoài ra, một câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 không thể rẽ nhánh từ một mệnh đề 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 sang một mệnh đề câu lệnh khác, như ví dụ sau đây cho thấy

IF trans_type = 'CR' THEN
   UPDATE accounts SET balance = balance + credit WHERE ...
ELSE
   UPDATE accounts SET balance = balance - debit WHERE ...
END IF;

7

Ví dụ tiếp theo cho thấy rằng một câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 không thể phân nhánh từ một khối bao quanh thành một khối con

IF trans_type = 'CR' THEN
   UPDATE accounts SET balance = balance + credit WHERE ...
ELSE
   UPDATE accounts SET balance = balance - debit WHERE ...
END IF;

8

Ngoài ra, một câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 không thể phân nhánh ra khỏi chương trình con, như ví dụ sau cho thấy

IF trans_type = 'CR' THEN
   UPDATE accounts SET balance = balance + credit WHERE ...
ELSE
   UPDATE accounts SET balance = balance - debit WHERE ...
END IF;

9

Cuối cùng, một câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 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ụ: câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 sau đây là bất hợp pháp

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;
0

Tuy nhiên, một câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

65 có thể phân nhánh từ một trình xử lý ngoại lệ thành một khối bao quanh

Tuyên bố NULL

Tuyên bố

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

66 chỉ định rõ ràng việc không hành động; . Tuy nhiên, nó có thể cải thiện khả năng đọc. Trong cấu trúc cho phép các hành động thay thế, câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

66 đóng vai trò giữ chỗ. Nó cho người đọc biết rằng giải pháp thay thế có liên quan không bị bỏ qua, nhưng thực sự không cần thực hiện hành động nào. Trong ví dụ sau, câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

66 cho biết không có hành động nào được thực hiện đối với các trường hợp ngoại lệ không tê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;
1

Mỗi mệnh đề trong 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 phải chứa ít nhất một câu lệnh thực thi được. Câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

66 có thể thực thi được, 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, câu lệnh
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

66 nhấn mạnh rằng chỉ những nhân viên được xếp hạng cao nhất mới được thưởng

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;
2

Ngoài ra, câu lệnh

IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

66 là một cách thuận tiện để tạo sơ khai khi thiết kế ứng dụng từ trên xuống. Sơ khai là chương trình con giả cho phép bạn trì hoãn định nghĩa của một thủ tục 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
IF sales > quota THEN
   compute_bonus[empid];
   UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF;

66 đáp ứng yêu cầu í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

3 loại cấu trúc lặp chính là gì?

Điều khiển lặp lại. Câu lệnh LOOP và EXIT. Các câu lệnh LOOP 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 dạng câu lệnh LOOP. LOOP , WHILE-LOOP và FOR-LOOP .

Các loại cấu trúc lặp khác nhau là gì?

Lặp đi lặp lại là một cách khác để diễn đạt "làm điều gì đó nhiều lần". Hầu hết các vấn đề có thể được giải quyết thông qua cả đệ quy và lặp lại, nhưng một dạng có thể dễ sử dụng hơn nhiều so với dạng kia. Chúng ta sẽ nghiên cứu ba hình thức lặp. đệ quy đuôi, vòng lặp while và vòng lặp for .

Các loại câu lệnh lặp khác nhau là gì?

Câu lệnh lặp [C++] . Mỗi vòng lặp này lặp lại cho đến khi biểu thức kết thúc của nó ước tính bằng 0 [sai] hoặc cho đến khi kết thúc vòng lặp bị buộc bằng câu lệnh ngắt. while, do, for, and range-based for. Each of these iterates until its termination expression evaluates to zero [false], or until loop termination is forced with a break statement.

Các câu lệnh lặp trong Python là gì?

Trong Python, câu lệnh lặp còn được gọi là câu lệnh lặp hoặc câu lệnh lặp. Các câu lệnh lặp được sử dụng để thực hiện lặp đi lặp lại một phần của chương trình miễn là một điều kiện nhất định là Đúng .

Chủ Đề