Câu lệnh 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 trình tự.
- Giá trị của biểu thức trong câu lệnh CASE sẽ được coi như một bộ chọn.
- Biểu thức có thể thuộc bất kỳ kiểu nào (số học, biến, v.v.)
- Mỗi phương án được gán với một giá trị xác định trước nhất định (bộ chọn) và phương án có giá trị bộ chọn phù hợp với giá trị biểu thức 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 trình tự 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)WHENTHEN action_blockl;WHEN THEN action_block2;WHEN 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ỳ kiểu 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à
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 phù hợp với giá trị biểu thức. - 'END' đánh dấu phần cuối của câu lệnh CASE và nó là một phần bắt buộc của câu lệnh CASE.
Ví dụ 1: Tính toán số học sử dụng trường hợp
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.
DECLAREa NUMBER :=55;b NUMBER :=5;arth_operation VARCHAR2(20) :='MULTIPLY’;BEGINdbms_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 'NUMBER' và khởi tạo với giá trị '55'.
- Dòng mã 3: Khai báo biến 'b' là kiểu dữ liệu 'NUMBER' và khởi tạo 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 thông báo "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 sẽ được coi như một bộ chọn cho câu lệnh CASE này ngay bây giờ.
- Dòng mã 10: Mệnh đề WHEN có giá trị 'MULTIPLY' khớp với giá trị của bộ chọn, do đó bộ điều khiển sẽ chọn action_block này và sẽ in ra thông báo 'Phép nhân các số là: 275'.
- Dòng mã 13: Đánh dấu phần cuối của câu lệnh CASE.
- Dòng mã14: In thông báo "Chương trình đã hoàn thành".
Đầu ra mã:
Program started.Multiplication of the numbers are: 275Program completed.
Tuyên bố TRƯỜNG HỢP ĐÃ TÌM KIẾM
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 định nghĩa 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:
CASEWHENTHEN action_blockl;WHEN THEN action_block2;WHEN THEN action_block3;ELSE action_block_default;END CASE;
- Trong cú pháp trên, mỗi mệnh đề WHEN có
và riêng biệt. - 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 phần cuối của câu lệnh CASE và nó là một phần bắt buộc của câu lệnh CASE.
Ví dụ 1: Tính toán số học 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';BEGINdbms_output.put_line(‘Program started.' );CASEWHEN 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 'NUMBER' và khởi tạo với giá trị '55'.
- Dòng mã 3: Khai báo biến 'b' là kiểu dữ liệu 'NUMBER' và khởi tạo 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 thông báo "Chương trình đã bắt đầu".
- Dòng mã 7: Câu lệnh SEARCHED CASE 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 (THÊM, TRỪ, NHIỀU) 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'" 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 'Phép chia các số là: 11' sẽ được in.
- Dòng mã 17: Đánh dấu phần cuối của câu lệnh CASE.
- Dòng mã 18: In câu lệnh "Đã hoàn thành chương trình".
Đầu ra mã:
Program started.Division of the numbers are: 11Program completed.
Tóm lược
KIỂU | SỰ MIÊU TẢ | SỬ DỤNG |
---|---|---|
TRƯỜNG HỢP |
Tương tự với câu lệnh IF-THEN-ELSIF. Một '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ế (đá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ế chủ yếu. |