Thứ Hai, 24 tháng 7, 2023

Lệnh CASE trong Oracle

Trong bài này chúng ta sẽ tìm hiểu đến lệnh rẻ nhánh CASE trong Oracle, đây là lệnh giúp rẻ nhánh chương trình và thường áp dụng trong câu lệnh Select. Nếu trong Oracle/PLSQL có lệnh IF ELSE THEN thì trong câu lệnh truy vấn SQL có CASE.

Mục lục

  • 1. Cú pháp lệnh CASE trong Oracle
  • 2. Ví dụ với CASE trong Oracle
  • 3. Cách sử dụng khác của CASE
  • 4. Sử dụng toán tử trong WHEN

1. Cú pháp lệnh CASE trong Oracle

CASE sẽ đi với THEN để rẻ nhánh chương trình, cú pháp như sau:

1
2
3
4
5
6
7
8
9
10
CASE [ expression ]
 
   WHEN condition_1 THEN result_1
   WHEN condition_2 THEN result_2
   ...
   WHEN condition_n THEN result_n
 
   ELSE result
 
END

Đây là cú pháp đầy đủ của CASE. Nếu bạn là dân lập trình thì sẽ thấy công dụng của nó giống với lệnh SWITCH CASE. Các tham số của nó được giải thích như sau:

  • expression là giá trị dùng để so sánh với các condition (1, ... n) ở phía dưới.
  • condition_1condition_2, ... condition_n là các giá trị dùng để so sánh với expression, nếu cặp nào bằng nhau thì giá trị đằng sau WHEN sẽ được lấy.
  • result_1result_2, ... result_n là các giá trị sẽ được lấy nếu condition ở trước nó bằng với expression.

nếu các cặp expression và condition không có cặp nào giống nhau thì giá trị tại ELSE sẽ được lấy.

Ví dụ: Trong bảng sinh viên trường GENDER sẽ lưu trữ thông tin giới tính của sinh viên, nếu gender = 1 thì là Nam và gender = 2 là Nữ. Hãy viết câu truy vấn trả về Nam hoặc Nữ thay vì 1 hoặc 2.

1
2
3
4
5
6
7
SELECT ID, NAME,
CASE GENDER
  WHEN 1 THEN 'Nam'
  WHEN 2 THEN 'Nu'
  ELSE 'Unknow'
END
FROM STUDENTS;

Câu truy vấn này sẽ trả về Unknow nếu gender khác 1 và 2.

2. Ví dụ với CASE trong Oracle

Bây giờ mình sẽ thực hiện thêm một vài ví dụ nữa.

Ví dụ 1: Hãy duyệt qua tất cả các table và kiểm tra xem owner là ai.

1
2
3
4
5
6
7
SELECT table_name,
CASE
  WHEN owner='SYS' THEN 'The owner is SYS'
  WHEN owner='SYSTEM' THEN 'The owner is SYSTEM'
  ELSE 'The owner is another value'
END
FROM all_tables;

Nếu viết bằng lệnh IF - THEN - ELSE thì như sau:

1
2
3
4
5
6
7
8
9
10
IF owner = 'SYS' THEN
   result := 'The owner is SYS';
 
ELSIF owner = 'SYSTEM' THEN
   result := 'The owner is SYSTEM'';
 
ELSE
   result := 'The owner is another value';
 
END IF;

Đương nhiên đoạn code này chỉ áp dụng khi bạn viết Procedure, function hoặc trigger.

3. Cách sử dụng khác của CASE

Đôi khi ta không cần phải truyền vào expression mà sẽ so sánh trực tiếp tại condition.

1
2
3
4
5
6
SELECT
CASE
  WHEN a < b THEN 'hello'
  WHEN d < e THEN 'goodbye'
END
FROM suppliers;

Rõ ràng cách viết này sẽ trực quan hơn, bạn có thể sử dụng tùy biến phép so sánh ở condition. Tuy nhiên đôi khi cũng có trường hợp bị dài dòng nên bạn phải sử dụng cho hợp lý tùy vào từng trường hợp cụ thể nhé.

4. Sử dụng toán tử trong WHEN

Câu hỏi đặt ra bây giờ là làm thế nào để tạo ra nhiều điều kiện cho mỗi WHEN? Rất đơn giản, ta chỉ cần sử dụng các toán tử như: AND, OR, ... Ví dụ dưới đây thể hiện cho cách làm này.

1
2
3
4
5
6
SELECT supplier_id,
CASE
  WHEN supplier_name = 'IBM' and supplier_type = 'Hardware' THEN 'North office'
  WHEN supplier_name = 'IBM' and supplier_type = 'Software' THEN 'South office'
END
FROM suppliers;

Bạn có thể thay thế AND bởi một toán tử khác bất kì, miễn là đúng với cú pháp của Oracle.

Trên là tất cả cách dùng của CASE.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master