12/08/2018, 13:56

PL/SQL Decision Making Statements

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 ...

sql-tutorials.png

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).

110215_0814_PLSQLDecisi1.png

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.

110215_0814_PLSQLDecisi2.png

  • 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ã sau END 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

110215_0814_PLSQLDecisi3.png

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).

110215_0814_PLSQLDecisi5.png

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.

110215_0814_PLSQLDecisi6.png

  • 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ẻ

110215_0814_PLSQLDecisi7.png

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.

110215_0814_PLSQLDecisi8.png

  • 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:
  1. Khi bộ điều khiển tìm thấy bất kỳ điều kiện trả về TRUE, các action_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.

  2. 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').

110215_0814_PLSQLDecisi9.png

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').

110215_0814_PLSQLDecisi10.png

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.

110215_0814_PLSQLDecisi11.png

110215_0814_PLSQLDecisi12.png

  • 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.

110215_0814_PLSQLDecisi13.png

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.

110215_0814_PLSQLDecisi15.png

  • 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.

110215_0814_PLSQLDecisi16.png

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.

110215_0814_PLSQLDecisi17.png

  • 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.

110215_0814_PLSQLDecisi18.png

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

0