V předchozím příspěvku jsme viděli fungování zpracování Oracle Decode
Zpracování dekódování Oracle SQL
Nyní se podívejme na zpracování příkazů Oracle Case
Prohlášení případu v Oracle
Je to podobné jako u příkazu Decode. Databáze před Oracle 8.1.6 měly pouze funkci DECODE. CASE byl představen v Oracle 8.1.6 jako standardní, smysluplnější a výkonnější funkce.
Vše, co umí DECODE, umí i CASE. CASE však umí ještě mnoho, což DECODE neumí. V tomto článku
si projdeme podrobné příkladyZačněme syntaxí příkazu 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
výraz je nepovinný
Příkaz Case můžeme rozdělit do dvou kategorií Příkaz Simple Case a Příkaz typu Searchable
Jednoduchý případ je stejný jako funkce Decode.
Příklad s jednoduchým příkazem 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;
Příkazy typu Searchable Case jsou příkazy typu case, kde zadáváme podmínku nebo predikát (příkaz case v oracle s více podmínkami)
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
Prohlášení Nested Oracle Case
Toto je vyjádření případu v rámci případu
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;
Důležité body o jednoduchém a prohledávatelném prohlášení Case
(1) Hledaný CASE vyhodnocuje podmínky nezávisle pro každou z možností „kdy“. S touto strukturou lze s hledaným CASE implementovat mnohem složitější podmínky než jednoduchý CASE.
(2) Hledaný CASE může kombinovat více testů pomocí několika sloupců, srovnání a operátorů AND/OR.
(3) Jak jednoduché, tak prohledávané konstrukce CASE, podmínky jsou vyhodnocovány postupně shora dolů a po první shodě jsou nalezeny ukončení provádění. Předpokládejme tedy, že platí více než jedna podmínka, bere se v úvahu pouze první akce.
(4) Oracle Database používá vyhodnocení zkratů. To znamená, že u jednoduchého výrazu CASE databáze vyhodnotí každou hodnotu Compare_expr pouze před jejím porovnáním s výrazem, spíše než vyhodnotí všechny hodnoty Compare_expr před porovnáním kterékoli z nich s výrazem expr. V důsledku toho Oracle nikdy nevyhodnocuje porovnávací_výraz, pokud se předchozí porovnávací_výraz rovná výrazu. Pro hledaný výraz CASE databáze vyhodnotí každou podmínku, aby určila, zda je pravdivá, a nikdy nevyhodnotí podmínku, pokud byla pravdivá předchozí podmínka
Nyní se podívejme na rozdíl mezi příkazem Case a Decode
(1) DECODE může pracovat pouze se skalárními hodnotami, ale CASE může pracovat s logickými operátory, predikáty a prohledávatelnými poddotazy.
Víme, že dekódování může pracovat se skalárními hodnotami. Nemůžeme jej použít pro logické operátory. Abychom toho mohli využít, musíme to převést na skalární hodnoty.
Case celý proces usnadňuje. V příkazu Case
můžeme snadno použít logický operátorSQL> 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
Výše uvedené se nazývá prohledávatelný případ prohlášení
(2) CASE může fungovat jako konstrukce PL/SQL, ale DECODE se používá pouze v příkazech SQL. CASE lze použít jako parametr funkce/procedury.
Příklad
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; /
Známka V_x je výborná.
(3) CASE očekává konzistenci datových typů, DECODE nikoli.
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 vyhovuje ANSI SQL. DECODE je majetkem společnosti Oracle.
(5) CASE se v optimalizátoru spouští rychleji než DECODE.
(6) CASE je příkaz, zatímco DECODE je funkce.
Související články
Výukové programy Oracle sql :Seznam všech výukových lekcí SQL, které lze použít ke zvládnutí SQL a použití při správě a manipulaci s daty RDBMS (Oracle,MySql)
Otázky k rozhovoru s Oracle:Podívejte se na tuto stránku, kde najdete 49 nejlepších Otázky a odpovědi Oracle Interview:Základy, Oracle SQL, které vám pomohou při pohovorech.
Záznamy Oracle PLSQL:Podívejte se na tento článek o fungování záznamů Oracle PLSQL. Zjistěte také různé způsoby, jak jej definovat a přiřadit mu hodnotu
Vývojářský nástroj Oracle SQL:Podívejte se na tuto stránku, kde najdete všechny informace o vývojářském nástroji Oracle sql,Jak stáhnout vývojář Oracle sql, jak nainstalovat
Funkce data Oracle:Podívejte se na tento příspěvek pro funkce data Oracle, rozdíl data Oracle v letech, rozdíl data Oracle ve dnech, rozdíl data Oracle v měsících.
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expressions004.htm
Doporučené kurzy
Zde je pěkný kurz Udemy pro Oracle SQL
Oracle-Sql-Krok za krokem:Tento kurz pokrývá základní sql, spojení, vytváření tabulek a úpravu jejich struktury, vytváření zobrazení, sjednocení, sjednocení – vše a mnoho dalších věcí. . Skvělý kurz a kurz, který musíte mít pro začátečníky SQL
Úplný certifikační kurz Oracle SQL :Toto je dobrý kurz pro každého, kdo chce být Job připravený na vývojářské dovednosti SQL. Pěkně vysvětlený kurz
Oracle SQL Developer:Základy, tipy a triky :Vývojářský nástroj Oracle Sql používá mnoho vývojářů. Tento kurz nám poskytuje triky a lekce, jak jej efektivně používat a stát se produktivním vývojářem sql
Oracle SQL Performance Tuning Masterclass 2020 :Ladění výkonu je jednou z kritických a nejvyhledávanějších dovedností. Toto je dobrý kurz, jak se o tom dozvědět a začít s laděním výkonu SQL