PL/SQL Decision Making Statements
Bài đăng này đã không được cập nhật trong 3 năm
Introduction
Decision making statements là việc kiểm soát các dòng lệnh được thực thi trong SQL dựa trên các điều kiện đặt trước. Nó cung cấp cho các lập trình viên sự kiểm soát tốt hơn cũng như việc ngăn ngừa một mã đặc biệt nào đó(sơ đồ 1) hoặc chọn một mã mong muốn dựa trên các điều kiện (sơ đồ 2).
Oracle cung cấp một số loại Decision Making Statements:
- IF-THEN
- IF-THEN-ELSE
- IF-THEN-ELSIF
- NESTED-IF
- CASE
- SEARCHED CASE
Chúng ta sẽ đi vào từng statement để tìm hiểu cú pháp về chúng.
IF-THEN Statement
IF-THEN được sử dụng để thực hiện một phần cụ thể của đoạn mã với điều kiện là thỏa mãn.
Các điều kiện trả kiểm tra dạng boolean TRUE | FALSE
cho phép thực hiện hoặc bỏ qua một đoạn mã dựa trên các điều kiện được xác định trước.
- Trong đoạn cú pháp trên, từ khóa IF theo sau bởi một điều kiện để kiểm tra giá trị biểu thức là
TRUE | FALSE
. <action_block>
sẽ được thực thi khi mà điều kiện trả về của IF làTRUE
.- Trong trường hợp điều kiện
FALSE
SQL sẽ bỏ qua<action_block>
và nó sẽ bắt đầu thực thi mã sauEND IF
.
Note: SQL sẽ coi điều kiện NULL
tương ứng FALSE
.
Ví dụ 1: In ra một thông báo khi số lượng lớn hơn 100
Ví dụ 2: In ra một thông báo nếu một bảng chữ cái được hiện diện trong các nguyên âm tiếng Anh (A, E, I, O, U).
IF-THEN-ELSE Statement
IF-THEN-ELSE statement được sử dụng chủ yếu để lựa chọn giữa hai phương án dựa trên các điều kiện xác định trước.
- Trong cú pháp trên, từ khóa IF kiểm tra giá trị biểu thức để đưa ra kết quả
TRUE | FALSE
. <action_block1>
sẽ được thực thi khi điều kiện trả về từ biểu thức trong IF làTRUE
.- Trong trường hợp điều kiện xác định là
FALSE
, SQL sẽ thực hiện<action_block2>
. - Trong mọi trường hợp, một trong những khối hai hành động sẽ được thực thi.
Ví dụ: In ra thông điệp kiểm tra một số là lẻ
IF-THEN-ELSIF Statement
- IF-THEN-ELSIF statement được sử dụng khi một thay thế được lựa chọn từ một tập hợp các lựa chọn.
- Điều kiện đầu tiên trả về
TRUE
sẽ được thực thi, và các điều kiện còn lại sẽ bị bỏ qua. - IF-THEN-ELSEIF có thể chứa khối ELSE trong nó. Khối ELSE này sẽ được thực hiện nếu không
IF
không thỏa mãn. Note: khối ELSE là tùy chọn trong câu lệnh điều kiện này. Nếu không có khối ELSE, và trong số các điều kiện không thỏa mãn, thì điều khiển sẽ bỏ qua tất cả các khối lệnh và bắt đầu thực hiện phần còn lại.
- Trong cú pháp trên, các điều khiển sẽ thực hiện
<action_block1>
chỉ khi trở về condition1 làTRUE
. - Nếu condition1 không trả về
TRUE
, thì điều khiển sẽ kiểm tra condition2. - Bộ điều khiển sẽ thoát khỏi IF trong hai trường hợp sau đây:
-
Khi bộ điều khiển tìm thấy bất kỳ điều kiện trả về
TRUE
, cácaction_block
tương ứng sẽ được thực thi và điều khiển sẽ thoát khỏi khối IF này và sẽ bắt đầu thực hiện các mã còn lại. -
Khi không có điều kiện thỏa mãn, các điều khiển sau đó sẽ thực hiện khối ELSE nếu có, sau đó sẽ thoát ra từ IF.
Ví dụ 1: Không có ELSE block
Trong ví dụ này, chúng ta sẽ in ra các lớp dựa trên với điều kiện khác (mark >= 70 là 'Grade A', mark >= 40 và mark <70 là 'Grade B', mark >= 35 và mark <40 'Grade C').
Ví dụ 2: Có ELSE
block
Trong ví dụ này, chúng ta sẽ in các lớp với điều kiện (mark >= 70 'Grade A', mark >= 40 và mark < 70 'Grade B', mark >= 35 và mark < 40 'Grade C', còn không thì 'No Grade').
NESTED-IF Statement
- NESTED-IF cho phép lập trình đặt một hoặc nhiều điều kiện IF vào bên trong
<action_block>
. - Mỗi điều kiện I` cần phải có một END IF riêng biệt đánh dấu phạm vi end-of.
Chúng ta có thể xem sơ đồ NESTED-IF dưới đây.
- Trong cú pháp trên, IF đầu tiên chính là IF ngoài cùng, nó chứa thêm một IF trong nó.
- Nếu condition1 trả về là
TRUE
,<action_block1>
sẽ được thực thi và chạy tiếp kiểm tra các condition2. - Nếu condition2 cũng trả về
TRUE
,<action_block2>
cũng sẽ được thực thi. - Trong trường hợp của condition2 để đánh giá
FALSE
, SQL sẽ bỏ qua<action_block2>
.
Ví dụ: Greatest of three number
Trong ví dụ này, chúng ta sẽ in ra số lớn nhất của ba số bằng cách sử dụng NESTED-IF. Các con số sẽ được chỉ định trong phần khai báo, bạn có thể thấy trong đoạn code dưới đây.
CASE Statement
- Lệnh CASE sử dụng WHEN chứ không phải là một biểu thức Boolean để lựa chọn các xử lý.
- Giá trị của biểu thức trong câu lệnh CASE sẽ được coi như một chọn lựa.
- Không giống như IF-THEN-ELSEIF, câu lệnh CASE cũng có thể được sử dụng trong câu lệnh SQL.
- Trong cú pháp trên, biểu thức sẽ trả về một giá trị mà có thể là kiểu biến, số, vv.
- Mỗi mệnh đề WHEN được coi là một lựa chọn thay thế mà có
<value>
và<action_block>
tương ứng sẽ được thực thi. - ELSE là tùy chọn giống DEFAULT ở một số ngôn ngữ lập trình, ở đây sẽ thực thi
<action_block_default>
. - END đánh dấu sự kết thúc của lệnh CASE và nó là một phần bắt buộc của CASE.
Ví dụ: thực hiện phép tính số học giữa hai số 55 và 5 bằng CASE.
SEARCHED CASE Statement
SEARCH CASE tương tự như CASE, thay vì sử dụng bộ chọn để chọn thay thế, SEARCH CASE sẽ trực tiếp có biểu thức quy định sau WHEN.
- Các WHEN thỏa mãn điều kiện sẽ được thực thi, và bộ điều khiển sẽ bỏ qua các WHEN còn lại.
- Trong cú pháp trên, mỗi WHEN lại có
<expression>
và<action_block>
. - Mệnh đề WHEN có biểu thức trả về
TRUE
sẽ được thực thi. - ELSE ở đây là tùy chọn để
<action_block_default>
được thực hiện khi không có WHEN nào đáp ứng. - Các END đánh dấu sự kết thúc của lệnh CASE và nó là một phần bắt buộc của CASE.
Ví dụ: thực hiện phép tính số học giữa hai số 55 và 5 sử dụng SEARCH CASE.
Summary
Như vậy, tôi vừa giới thiệu đến các bạn một loạt các Decision Making Statements trong PL/SQL. Các bạn có thể áp dụng các biểu thức điều kiện để thực hiện các đoạn lệnh mong muốn theo cú pháp tôi đưa bên trên.
Bạn cũng có thể xem nguồn chính từ trang http://www.guru99.com/pl-sql-decision-making-statements.html
Hoặc tham khảo từ trang https://www.tutorialspoint.com/plsql/plsql_if_then.htm
All rights reserved