Tuyên bố CASE trong Oracle PL/SQL với các ví dụ

Tuyên bố CASE là gì?

Câu lệnh CASE tương tự như câu lệnh IF-THEN-ELSIF, chọn một phương án thay thế dựa trên điều kiện từ các tùy chọn có sẵn.

  • Câu lệnh CASE sử dụng “bộ chọn” thay vì biểu thức Boolean để chọn chuỗi.
  • Giá trị của biểu thức trong câu lệnh CASE sẽ được coi là bộ chọn.
  • Biểu thức có thể thuộc bất kỳ loại nào (số học, biến, v.v.)
  • Mỗi phương án thay thế được gán với một giá trị được xác định trước (bộ chọn) nhất định và phương án thay thế có giá trị bộ chọn khớp với giá trị biểu thức điều kiện sẽ được thực thi.
  • Không giống như IF-THEN-ELSIF, câu lệnh CASE cũng có thể được sử dụng trong câu lệnh SQL.
  • Khối ELSE trong câu lệnh CASE chứa chuỗi cần được thực thi khi không có lựa chọn thay thế nào được chọn.

cú pháp

CASE (expression)
 WHEN <valuel> THEN action_blockl;
 WHEN <value2> THEN action_block2;
 WHEN <value3> THEN action_block3;
 ELSE action_block_default;
END CASE;
  • Trong cú pháp trên, biểu thức sẽ trả về một giá trị có thể thuộc bất kỳ loại nào (biến, số, v.v.).
  • Mỗi mệnh đề 'WHEN' được coi là một lựa chọn thay thế có Và .
  • Mệnh đề 'WHEN' khớp với giá trị của biểu thức sẽ được chọn và mệnh đề tương ứng sẽ được thực thi.
  • Khối 'ELSE' là tùy chọn chứa cần được thực thi khi không có lựa chọn thay thế nào khớp với giá trị biểu thức.
  • 'END' đánh dấu sự kết thúc của câu lệnh CASE và đây là phần bắt buộc của CASE.

Ví dụ 1: Tính toán số học sử dụng Case

Trong ví dụ này, chúng ta sẽ thực hiện phép tính số học giữa hai số 55 và 5.

DECLARE
a NUMBER :=55;
b NUMBER :=5;
arth_operation VARCHAR2(20) :='MULTIPLY’;
BEGIN
dbms_output.put_line(‘Program started.' );
CASE (arth_operation)
WHEN ‘ADD’ THEN dbms_output.put_line(‘Addition of the numbers are: '|| a+b );
WHEN ‘SUBTRACT' THEN dbms_output.put_line(‘Subtraction of the numbers are: '||a-b ); 
WHEN ‘MULTIPLY' THEN dbms_output.put_line(‘Multiplication of the numbers are: '|| a*b
);
WHEN ‘DIVIDE' THEN dbms_output.put_line(‘Division of the numbers are:'|| a/b);
ELSE dbms_output.put_line(‘No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line(‘Program completed.' );
END;
/

Giải thích mã

  • Dòng mã 2: Khai báo biến 'a' là kiểu dữ liệu 'SỐ' và khởi tạo nó với giá trị '55'.
  • Dòng mã 3: Khai báo biến 'b' là kiểu dữ liệu 'SỐ' và khởi tạo nó với giá trị '5.'
  • Dòng mã 4: Khai báo biến 'arth_Operation' là kiểu dữ liệu 'VARCHAR2' có kích thước 20 và khởi tạo nó với giá trị 'MULTIPLY'.
  • Dòng mã 6: In câu lệnh “Chương trình đã bắt đầu”.
  • Dòng mã 7: CASE kiểm tra giá trị của biểu thức. Trong trường hợp này, giá trị của biến 'arth_Operation' là 'MULTIPLY'. Giá trị này bây giờ sẽ được coi là bộ chọn cho câu lệnh CASE này.
  • Dòng mã 10: Mệnh đề WHEN có giá trị 'MULTIPLY' khớp với giá trị bộ chọn, do đó bộ điều khiển sẽ chọn action_block này và sẽ in thông báo 'Nhân các số là: 275'.
  • Dòng mã13: Đánh dấu sự kết thúc của câu lệnh CASE.
  • Dòng mã 14: In câu lệnh “Chương trình đã hoàn thành”.

Đầu ra mã

Program started.
Multiplication of the numbers are: 275
Program completed.

TÌM KIẾM TRƯỜNG HỢP

Câu lệnh SEARCHED CASE tương tự như câu lệnh CASE, thay vì sử dụng bộ chọn để chọn phương án thay thế, SEARCHED CASE sẽ trực tiếp có biểu thức được xác định trong mệnh đề WHEN.

  • Mệnh đề WHEN đầu tiên thỏa mãn điều kiện sẽ được thực thi và bộ điều khiển sẽ bỏ qua các lựa chọn thay thế còn lại.

cú pháp

CASE
WHEN <expression1> THEN action_blockl; 
WHEN <expression2> THEN action_block2; 
WHEN <expression3> THEN action_block3; 
ELSE action_block_default;
END CASE;
  • Trong cú pháp trên, mỗi mệnh đề WHEN có mệnh đề riêng biệt Và .
  • Mệnh đề WHEN mà biểu thức trả về TRUE sẽ được thực thi.
  • Khối 'ELSE' là tùy chọn chứa cần được thực thi khi không có lựa chọn thay thế nào thỏa mãn.
  • 'END' đánh dấu sự kết thúc của câu lệnh CASE và đây là phần bắt buộc của CASE.

Ví dụ 1: Tính toán số học bằng cách sử dụng trường hợp tìm kiếm

Trong ví dụ này, chúng ta sẽ thực hiện phép tính số học giữa hai số 55 và 5.

DECLARE a NUMBER :=55;
b NUMBER :=5;
arth_operation VARCHAR2(20) :='DIVIDE';
BEGIN
dbms_output.put_line(‘Program started.' );
CASE
WHEN arth_operation = 'ADD'
THEN dbms_output.put_line(‘Addition of the numbers are: '||a+b );
WHEN arth_operation = ‘SUBTRACT'
THEN dbms_output.put_line(‘Subtraction of the numbers are: '|| a-b);
WHEN arth_operation = ‘MULTIPLY’
THEN dbms_output.put_line(‘Multiplication of the numbers are: '|| a*b ); 
WHEN arth_operation = ’DIVIDE'
THEN dbms_output.put_line(‘Division of the numbers are: '|| a/b ):
ELSE dbms_output.put_line(‘No operation action defined. Invalid operation'); 
END CASE;
dbms_output.put_line(‘Program completed.' );
END;
/

Giải thích mã

  • Dòng mã 2: Khai báo biến 'a' là kiểu dữ liệu 'SỐ' và khởi tạo nó với giá trị '55'.
  • Dòng mã 3: Khai báo biến 'b' là kiểu dữ liệu 'SỐ' và khởi tạo nó với giá trị '5'.
  • Dòng mã 4: Khai báo biến 'arth_Operation' là kiểu dữ liệu 'VARCHAR2' có kích thước 20 và khởi tạo nó với giá trị 'DIVIDE.'
  • Dòng mã 6: In câu lệnh “Chương trình đã bắt đầu”.
  • Dòng mã 7: Câu lệnh TÌM KIẾM bắt đầu. Mã từ dòng 8 đến dòng 13 bị bỏ qua vì giá trị bộ chọn của chúng (ADD, SUBTRACT, MULTIPLY) không khớp với giá trị của 'arth_Operation'.
  • Dòng mã 14: Biểu thức mệnh đề WHEN “arth_Operation = 'DIVIDE'” được thỏa mãn và biểu thức trả về TRUE.
  • Dòng mã 15: Action_block của mệnh đề WHEN sẽ được thực thi và thông báo 'Chia các số là: 11' sẽ được in ra.
  • Dòng mã 17: Đánh dấu sự kết thúc của câu lệnh CASE.
  • Dòng mã 18: In câu lệnh “Chương trình đã hoàn thành”.

Đầu ra mã

Program started.
Division of the numbers are: 11
Program completed.

Tổng kết

LOẠI MÔ TẢ SỬ DỤNG
TRƯỜNG HỢP Tương tự như NẾU-THÌ-ELSIF tuyên bố. 'SELECTOR' được sử dụng để chọn các lựa chọn thay thế thay vì biểu thức Boolean. Được sử dụng để chọn từ một số lựa chọn thay thế bằng cách sử dụng 'SELECTOR'
TRƯỜNG HỢP TÌM KIẾM Câu lệnh CASE không có 'SELECTOR' thực tế. Thay vào đó, nó chứa điều kiện thực tế (được đánh giá là TRUE/FALSE) sẽ chọn các phương án thay thế. Được sử dụng để chọn từ nhiều hơn hai lựa chọn thay thế.