Chúng ta đã thấy cách xử lý Giải mã Oracle hoạt động trong bài trước
Xử lý giải mã sql Oracle
Bây giờ chúng ta hãy xem cách xử lý câu lệnh Oracle Case
Câu lệnh trường hợp trong Oracle
Nó tương tự như câu lệnh Decode. Cơ sở dữ liệu trước Oracle 8.1.6 chỉ có chức năng DECODE. CASE đã được giới thiệu trong Oracle 8.1.6 như một hàm tiêu chuẩn, có ý nghĩa hơn và mạnh mẽ hơn.
Mọi thứ DECODE có thể làm, CASE cũng có thể. Có rất nhiều điều khác mà CASE có thể làm được, điều mà DECODE không thể làm được. Chúng ta sẽ xem xét các ví dụ chi tiết trong bài viết này
Hãy bắt đầu với Cú pháp câu lệnh Case
CASE [expression] when condition_1 then value_1 when condition_2 then value_2 when condition_2 then value_2 …. else value_n end
biểu thức là tùy chọn
Chúng ta có thể chia câu lệnh Case thành hai loại Câu lệnh trường hợp đơn giản và câu lệnh trường hợp có thể tìm kiếm
Câu lệnh viết hoa đơn giản giống như hàm Giải mã.
Ví dụ với câu lệnh Simple CASE
select case region when ‘N’ then ’North’ when ‘S’ then ’South’ when ‘E’ then ’East’, when ‘W’ then ’West’ else ‘UNKNOWN’ end from customer;
Câu lệnh trường hợp có thể tìm kiếm là câu lệnh trường hợp trong đó chúng tôi chỉ định một điều kiện hoặc vị từ (câu lệnh trường hợp trong tiên tri có nhiều điều kiện)
SQL> select emp_name , case when Salary < 10000 then 'Junior Level' when (Salary >=10000 and Salary < 50000) then 'Middle Level' when (Salary >= 50000 and Salary < 100000) then 'Senior Level' else 'Managers' end Emp_level from employee_info where rownum < 5; EMP_NAME EMP_LEVEL ---------- --------- JOHN Junior Level DON Senior Level BOB Manager BILL Middle Level
Câu lệnh Oracle Case lồng nhau
Đây là câu lệnh trường hợp trong câu lệnh trường hợp
SQL> select emp_name , case when Salary < 10000 then 'Junior Level' when (Salary >=10000 and Salary < 50000) then 'Middle Level' when (Salary >= 50000 and Salary < 100000) then 'Senior Level' else (Case when grade ='20' then 'Vice President' when grade='21' then 'Senior Vice President' else 'Manager' End) end Emp_level from employee_info where rownum < 5;
Những điểm quan trọng về câu lệnh Case đơn giản và có thể tìm kiếm
(1) CASE được tìm kiếm đánh giá các điều kiện một cách độc lập theo từng tùy chọn “khi nào”. Với cấu trúc này, các điều kiện phức tạp hơn có thể được thực hiện với CASE đã tìm kiếm hơn là CASE đơn giản.
(2) Một CASE được tìm kiếm có thể kết hợp nhiều thử nghiệm bằng cách sử dụng một số cột, phép so sánh và toán tử VÀ / HOẶC.
(3) Cả cấu trúc CASE đơn giản và được tìm kiếm, các điều kiện được đánh giá tuần tự từ trên xuống dưới và các lần thoát thực thi sau khi tìm thấy kết quả phù hợp đầu tiên. Vì vậy, giả sử có nhiều hơn một điều kiện là đúng, thì chỉ hành động đầu tiên được xem xét.
(4) Cơ sở dữ liệu Oracle sử dụng đánh giá ngắn mạch. Nghĩa là, đối với một biểu thức CASE đơn giản, cơ sở dữ liệu chỉ đánh giá từng giá trị Compare_expr trước khi so sánh nó với expr, thay vì đánh giá tất cả các giá trị so sánh_expr trước khi so sánh bất kỳ giá trị nào trong số chúng với expr. Do đó, Oracle không bao giờ đánh giá so sánh_expr nếu so sánh_expr trước đó bằng expr. Đối với một biểu thức CASE đã tìm kiếm, cơ sở dữ liệu sẽ đánh giá từng điều kiện để xác định xem nó có đúng hay không và không bao giờ đánh giá một điều kiện nếu điều kiện trước đó là đúng
Bây giờ chúng ta hãy xem sự khác biệt giữa câu lệnh Case và Decode
(1) DECODE chỉ có thể hoạt động với các giá trị vô hướng nhưng CASE có thể hoạt động với các toán tử logic, vị từ và các truy vấn con có thể tìm kiếm được.
Chúng tôi biết rằng giải mã có thể hoạt động với các giá trị vô hướng. Chúng tôi không thể sử dụng nó cho các toán tử lôgic. Chúng tôi phải chuyển đổi nó thành các giá trị vô hướng để sử dụng nó.
Trường hợp làm cho toàn bộ quá trình dễ dàng hơn. Chúng ta có thể dễ dàng sử dụng toán tử logic trong câu lệnh Case
SQL> select city , case when population < 100000 then 'Tier I' when (population >=100000 and population < 200000) then 'Tier II' when (population >= 200000 and population < 300000) then 'Tier III' else 'TIER IV' end City_Tier from city_info where rownum < 5; CITY CITY_TIER ---------- --------- XYX TIER I XYZ TIER II XZW TIER II
Ở trên được gọi là câu lệnh Case có thể tìm kiếm
(2) CASE có thể hoạt động như một cấu trúc PL / SQL nhưng DECODE chỉ được sử dụng trong các câu lệnh SQL.CASE có thể được sử dụng như một tham số của một hàm / thủ tục.
Ví dụ
DECLARE V_x VARCHAR2(10) := 'A'; V_y VARCHAR2(10); BEGIN V_y := CASE V_x WHEN 'A' THEN 'Excellent' WHEN 'B' THEN 'Good' WHEN 'C' Then 'Average' ELSE 'Poor' END; DBMS_OUTPUT.PUT_LINE( 'Grade V_x is '||V_y||'.' ); END; /
Hạng V_x là Xuất sắc.
(3) CASE mong đợi sự nhất quán của kiểu dữ liệu, DECODE thì không.
select case 5 when 1 then '1' 2 when '2' then '2' 3 else '5' 4 end 5 from dual; when '2' then '2' * ERROR at line 2: ORA-00932: inconsistent datatypes: expected NUMBER got CHAR
(4) CASE tuân thủ ANSI SQL. DECODE là độc quyền của Oracle.
(5) CASE thực thi trong trình tối ưu hóa nhanh hơn DECODE.
(6) CASE là một câu lệnh trong khi DECODE là một hàm.
Các bài viết có liên quan
Oracle sql Tutorials:Liệt kê tất cả các bài học hướng dẫn sql có thể được sử dụng để nắm vững sql và sử dụng trong quản lý và thao tác dữ liệu RDBMS (Oracle, MySql)
Các câu hỏi phỏng vấn Oracle:Xem trang này để biết Top 49 Câu hỏi và câu trả lời của Cuộc phỏng vấn Oracle:Khái niệm cơ bản, Oracle SQL để giúp bạn trong các cuộc phỏng vấn.
Bản ghi oracle PLSQL:Hãy xem bài viết này về hoạt động của bản ghi oracle PLSQL. Ngoài ra, hãy tìm hiểu các cách khác nhau để xác định nó và gán giá trị cho nó
Công cụ dành cho nhà phát triển Oracle SQL:Xem trang này để biết tất cả thông tin về công cụ dành cho nhà phát triển Oracle sql, Cách tải xuống nhà phát triển Oracle sql, cách cài đặt
Các hàm oracle date:Xem bài đăng này để biết các hàm oracle date, chênh lệch ngày oracle theo năm, chênh lệch ngày oracle trong ngày, chênh lệch ngày oracle trong tháng.
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expressions004.htm
Các khóa học được đề xuất
Đây là Khóa học Udemy hay dành cho Oracle SQL
Oracle-Sql-Step-by-step:Khóa học này bao gồm sql cơ bản, các phép nối, Tạo Bảng và sửa đổi cấu trúc của nó, Tạo Dạng xem, Liên minh, Liên hợp-tất cả và nhiều thứ khác . Một khóa học tuyệt vời và phải có cho người mới bắt đầu sử dụng SQL
Khóa học chứng chỉ SQL hoàn chỉnh của Oracle :Đây là một khóa học tốt cho bất kỳ ai muốn sẵn sàng làm việc cho các kỹ năng của nhà phát triển SQL. Một khóa học được giải thích thú vị
Oracle SQL Developer:Cơ bản, Mẹo và Thủ thuật :Công cụ dành cho nhà phát triển Oracle Sql đang được nhiều nhà phát triển sử dụng. Khóa học này cung cấp cho chúng ta các thủ thuật và bài học về cách sử dụng nó một cách hiệu quả và trở thành một nhà phát triển sql hiệu quả
Oracle SQL Performance Tuning Masterclass 2020 :Điều chỉnh hiệu suất là một trong những kỹ năng quan trọng và được tìm kiếm nhiều nhất. Đây là một khóa học tốt để tìm hiểu về nó và bắt đầu thực hiện điều chỉnh hiệu suất sql