Видяхме как работи обработката на Oracle Decode в предишната публикация
Обработка на Oracle sql декодиране
Сега нека видим обработката на изявления на Oracle Case
Изявление на Case в Oracle
Това е подобно на изявлението Decode. Базите данни преди Oracle 8.1.6 имаха само функцията DECODE. CASE беше въведен в Oracle 8.1.6 като стандартна, по-смислена и по-мощна функция.
Всичко, което DECODE може да направи, CASE също може. Въпреки това CASE може да направи много други неща, които DECODE не може. Ще разгледаме подробни примери в тази статия
Нека започнем със синтаксис на изявлението 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
изразът е по избор
Можем да разделим изявлението Case на две категории изявление за прост случай и изявление за случай на търсене
Изявлението за прост case е точно като функцията за декодиране.
Пример с прост израз 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;
Изявление Case с възможност за търсене е изявление за case, където указваме условие или предикат (изявление за case в oracle с множество условия)
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
Изявление за вложен случай на Oracle
Това е изявление на случая в изявлението на случая
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;
Важни моменти относно прост и търсещ изявление за Case
(1) Търсеният CASE оценява условията независимо при всяка от опциите „кога”. С тази структура далеч по-сложни условия могат да бъдат реализирани с търсен CASE от обикновен CASE.
(2) Търсен CASE може да комбинира множество тестове, използвайки няколко колони, сравнения и оператори И/ИЛИ.
(3) Както прости, така и търсени конструкции CASE, условията се оценяват последователно отгоре надолу и се намират изходи от изпълнението след първото съвпадение. Така че, да предположим, че е вярно повече от едно условие, разглежда се само първото действие.
(4) Oracle Database използва оценка на късо съединение. Тоест, за прост CASE израз, базата данни оценява всяка стойност на сравнение_expr само преди да я сравни с израза, вместо да оценява всички стойности на сравнение_израз, преди да сравни която и да е от тях с expr. Следователно Oracle никога не оценява сравнение_expr, ако предишно сравнение_изразване е равно на expr. За търсен CASE израз базата данни оценява всяко условие, за да определи дали е вярно, и никога не оценява условие, ако предишното условие е било вярно
Сега нека видим разликата между изявлението Case и Decode
(1) DECODE може да работи само със скаларни стойности, но CASE може да работи с логически оператори, предикати и подзаявки за търсене.
Знаем, че декодирането може да работи със скаларни стойности. Не можем да го използваме за логически оператори. Трябва да го преобразуваме в скаларни стойности, за да се възползваме от това.
Кейсът улеснява целия процес. Можем лесно да използваме логически оператор в изявлението 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
Горното се нарича изявления на Case с възможност за търсене
(2) CASE може да работи като PL/SQL конструкция, но DECODE се използва само в SQL изрази. CASE може да се използва като параметър на функция/процедура.
Пример
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; /
Оценка V_x е отлична.
(3) CASE очаква последователност на типа данни, DECODE не.
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 отговаря на ANSI SQL. DECODE е собственост на Oracle.
(5) CASE се изпълнява по-бързо в оптимизатора, отколкото DECODE.
(6) CASE е израз, докато DECODE е функция.
Сродни статии
Уроци за Oracle sql :Списък на всички уроци за sql, които могат да се използват за овладяване на sql и използване в управление и манипулиране на данни в RDBMS (Oracle,MySql)
Въпроси за интервю за Oracle:Вижте тази страница за Топ 49 Въпроси и отговори на Oracle Interview:Основи, Oracle SQL, за да ви помогне при интервюта.
oracle PLSQL записи:Вижте тази статия за работата на Oracle PLSQL записи. Освен това, разберете различните начини да го дефинирате и да му присвоите стойност
Инструмент за разработчици на Oracle SQL:Вижте тази страница за цялата информация относно инструмента за разработчици на Oracle sql, как да изтеглите Oracle sql програмист, как да инсталирате
Функции за дата на оракула :Вижте тази публикация за функциите на датата на оракула, разликата в датата на оракула в години, разликата в датата на оракула в дни, разликата в датата на оракула в месеци.
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expressions004.htm
Препоръчани курсове
Ето хубавия курс на Udemy за Oracle SQL
Oracle-Sql-Step-by-step :Този курс обхваща основния sql, присъединяването, Създаването на таблици и промяната на структурата им, Създаване на изглед, Обединение, Обединение - всичко и много други неща . Страхотен курс и задължителен курс за SQL начинаещи
Пълният курс за сертифициране на Oracle SQL :Това е добър курс за всеки, който иска да бъде готов за работа за SQL разработчици. Приятно обяснен курс
Oracle SQL Developer:Основни неща, съвети и трикове :Инструментът за разработчици на Oracle Sql се използва от много разработчици. Този курс ни дава трикове и уроци за това как ефективно да го използваме и да станем продуктивен sql разработчик
Майсторски клас за настройка на производителността на Oracle 2020 г. :Настройката на производителността е едно от критичните и най-търсените умения. Това е добър курс, за да научите за него и да започнете да правите настройка на производителността на sql