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.

  • 🔀 Mục đích: CASE chọn một khối hành động từ nhiều khối, sử dụng bộ chọn thay vì chuỗi Boolean.
  • 🎯 Bộ chọn: Biểu thức CASE được đánh giá một lần và so sánh với từng giá trị WHEN.
  • 🔎 Đã tìm kiếm TRƯỜNG HỢP: Đặt điều kiện đầy đủ vào mỗi mệnh đề WHEN và thực thi điều kiện đầu tiên đúng.
  • 🧮 Bất kỳ loại nào: Bộ chọn có thể là một biến, một số hoặc một biểu thức số học.
  • 🛟 KHÁC: Khối ELSE tùy chọn sẽ được thực thi khi không có lựa chọn thay thế nào phù hợp.
  • 🔚 KẾT THÚC TRƯỜNG HỢP: Lệnh END CASE bắt buộc sẽ kết thúc câu lệnh.
  • 🗄️ Thân thiện với SQL: Khác với câu lệnh IF, CASE cũng có thể được sử dụng trực tiếp bên trong các câu lệnh SQL.

Tuyên bố CASE trong Oracle PL / SQL

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.

Câu Hỏi Thường Gặp

Một câu lệnh CASE đơn giản so sánh một giá trị của biến chọn với từng giá trị của biến WHEN. Một câu lệnh CASE tìm kiếm không có biến chọn và đánh giá toàn bộ điều kiện trong mỗi biến WHEN, do đó nó xử lý được cả phạm vi và các phép thử phức hợp.

Đúng vậy. Biểu thức CASE có thể xuất hiện trong mệnh đề SELECT, WHERE hoặc ORDER BY, đây là một lợi thế quan trọng so với IF-THEN-ELSIF, một cấu trúc chỉ hoạt động bên trong các khối PL/SQL.

Câu lệnh CASE sẽ gây ra ngoại lệ CASE_NOT_FOUND nếu không có nhánh nào khớp và không có ELSE. Việc thêm ELSE, ngay cả một hành động NULL rỗng, cũng sẽ tránh được lỗi thời gian chạy này.

Đúng vậy. Khi các nhánh so sánh một biểu thức với các giá trị cố định, AI có thể viết lại chuỗi thành một câu lệnh CASE gọn gàng hơn. Hãy kiểm tra kết quả, vì một câu lệnh CASE không có ELSE sẽ hoạt động khác với một câu lệnh ELSIF bị thiếu.

Câu lệnh CASE thực thi một khối hành động cho mỗi nhánh và kết thúc bằng END CASE. Biểu thức CASE trả về một giá trị duy nhất và kết thúc bằng END, do đó nó có thể được gán cho một biến hoặc được sử dụng trong SQL.

Tóm tắt bài viết này với: