sql >> Databáze >  >> RDS >> Oracle

Vysvětlení případu Oracle s tipy a příklady

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říklady

Zač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átor
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

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


  1. Databázový model pro online průzkum. Část 1

  2. Výuková cesta MySQL

  3. Zkoumání různých způsobů šifrování dat MariaDB

  4. Vraťte seznam vypočítaných sloupců na serveru SQL Server