Tuyên bố CASE trong Oracle PL/SQL với các ví dụ
⚡ Tóm tắt thông minh
Câu lệnh CASE trong PL/SQL chọn một phương án từ nhiều phương án dựa trên một điều kiện lọc, tương tự như IF-THEN-ELSIF nhưng rõ ràng hơn. Một câu lệnh CASE đơn giản khớp với giá trị của điều kiện lọc, trong khi một câu lệnh CASE tìm kiếm sẽ đánh giá điều kiện trong mỗi mệnh đề WHEN và thực thi điều kiện đầu tiên đúng.
Câu lệnh CASE là gì?
Câu lệnh CASE tương tự như câu lệnh IF-THEN-ELSIF; nó chọn một phương án dựa trên một điều kiện từ các lựa chọn có sẵn.
- Câu lệnh CASE sử dụng một "bộ chọn" thay vì một biểu thức Boolean để chọn trình tự.
- Giá trị của biểu thức trong câu lệnh CASE được coi như một bộ chọn.
- Biểu thức có thể thuộc bất kỳ loại nào (số học, biến số, v.v.).
- Mỗi phương án được gán một giá trị xác định trước (bộ chọn), và phương án có giá trị bộ chọn khớp với giá trị của 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 trình tự thực thi khi không có lựa chọn nào được chọn.
cú pháp
CASE (expression) WHEN <value1> THEN action_block1; 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 trả về một giá trị có thể thuộc bất kỳ kiểu dữ liệu nào.
- Mỗi mệnh đề 'WHEN' là một lựa chọn có một và một .
- Mệnh đề 'WHEN' có giá trị khớp với biểu thức sẽ được chọn, và nó được thực thi.
- Khối 'ELSE' là tùy chọn và chứa thông tin cần thiết. Thực thi khi không có lựa chọn thay thế nào phù hợp.
- 'END' đánh dấu sự kết thúc của câu lệnh CASE và là một phần bắt buộc của CASE.
Ví dụ 1: Phép tính số học sử dụng CASE
Trong ví dụ này, chúng ta thực hiện phép tính cộng trừ 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; /
Code Giải thích
- Code Dòng 2: Khai báo biến 'a' là 'NUMBER' và khởi tạo nó với giá trị '55'.
- Code Dòng 3: Khai báo biến 'b' là 'NUMBER' và khởi tạo nó với giá trị '5'.
- Code Dòng 4: Khai báo biến 'arth_operation' là kiểu 'VARCHAR2' với kích thước 20 và khởi tạo nó với giá trị 'MULTIPLY'.
- Code Dòng 6: In ra câu lệnh “Chương trình đã bắt đầu”.
- Code Dòng 7: CASE kiểm tra giá trị của biểu thức. Ở đây, giá trị của 'arth_operation' là 'MULTIPLY', được coi là bộ chọn.
- Code Dòng 10: Mệnh đề WHEN với giá trị 'MULTIPLY' khớp với bộ chọn, vì vậy bộ điều khiển chọn khối hành động này và in ra 'Tích của các số là: 275'.
- Code Dòng 13: Đánh dấu kết thúc câu lệnh CASE.
- Code Dòng 14: In ra thông báo “Chương trình đã hoàn thành”.
Code Đầu ra
Program started. Multiplication of the numbers are: 275 Program completed.
TÌM KIẾM TRƯỜNG HỢP
Câu lệnh CASE tìm kiếm tương tự như câu lệnh CASE thông thường, nhưng thay vì sử dụng bộ chọn để chọn phương án, câu lệnh CASE tìm kiếm có điều kiện được định nghĩa trực tiếp 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 còn lại.
cú pháp
CASE WHEN <expression1> THEN action_block1; 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ột phần 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 và chứa thông tin cần thiết. Thực hiện khi không có phương án nào được đáp ứng.
- 'END' đánh dấu sự kết thúc của câu lệnh CASE và là một phần bắt buộc của CASE.
Ví dụ 1: Phép tính số học sử dụng CASE đã tìm kiếm
Trong ví dụ này, chúng ta thực hiện phép tính cộng trừ 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; /
Code Giải thích
- Code Dòng 2: Khai báo biến 'a' là 'NUMBER' và khởi tạo nó với giá trị '55'.
- Code Dòng 3: Khai báo biến 'b' là 'NUMBER' và khởi tạo nó với giá trị '5'.
- Code Dòng 4: Khai báo biến 'arth_operation' là kiểu 'VARCHAR2' với kích thước 20 và khởi tạo nó với giá trị 'DIVIDE'.
- Code Dòng 6: In ra câu lệnh “Chương trình đã bắt đầu”.
- Code Dòng 7: Câu lệnh CASE được tìm kiếm bắt đầu. Các mệnh đề cho ADD, SUBTRACCác biến T và MULTIPLY bị bỏ qua vì điều kiện của chúng không khớp với giá trị của 'arth_operation'.
- Code dòng 14: Biểu thức mệnh đề WHEN “arth_operation = 'DIVIDE'” được thỏa mãn và trả về TRUE.
- Code Dòng 15: Khối hành động của mệnh đề WHEN được thực thi và dòng chữ 'Chia các số là: 11' được in ra.
- Code Dòng 17: Đánh dấu kết thúc câu lệnh CASE.
- Code Dòng 18: In ra thông báo “Chương trình đã hoàn thành”.
Code Đầu ra
Program started. Division of the numbers are: 11 Program completed.
So sánh CASE và SEARCHED CASE
Cả hai hình thức đều chọn một nhánh, nhưng chúng khác nhau ở cách chọn nhánh, như được tóm tắt dưới đây.
| Kiểu | Mô tả Chi tiết | Sử dụng |
|---|---|---|
| CASE | Tương tự như NẾU-THÌ-ELSIF câu lệnh. Một 'bộ chọn' được sử dụng để chọn phương án thay thế thay vì một biểu thức Boolean. | Được sử dụng để chọn từ nhiều phương án khác nhau bằng cách sử dụng bộ chọn. |
| TRƯỜNG HỢP TÌM KIẾM | Câu lệnh CASE không có bộ chọn thực tế. Thay vào đó, nó chứa điều kiện (được đánh giá là TRUE hoặc FALSE) để chọn phương án. | Trước đây, người ta thường chọn từ hơn hai phương án, chủ yếu là theo phạm vi điều kiện. |

