W poprzednim poście widzieliśmy działanie przetwarzania Oracle Decode
Przetwarzanie dekodowania Oracle sql
Zobaczmy teraz przetwarzanie instrukcji Oracle Case
Sprawa w Oracle
Jest podobny do instrukcji Decode. Bazy danych przed Oracle 8.1.6 miały tylko funkcję DECODE. CASE został wprowadzony w Oracle 8.1.6 jako standardowa, bardziej znacząca i potężniejsza funkcja.
Wszystko, co potrafi DECODE, CASE też. Istnieje jednak wiele innych możliwości CASE, których DECODE nie może. W tym artykule omówimy szczegółowe przykłady
Zacznijmy od składni instrukcji 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
wyrażenie jest opcjonalne
Stwierdzenie Case możemy podzielić na dwie kategorie Stwierdzenie prostego przypadku i Stwierdzenie przypadku z możliwością przeszukiwania
Prosta instrukcja case jest podobna do funkcji Decode.
Przykład z instrukcją 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;
Instrukcja Case z możliwością wyszukiwania to instrukcja case, w której określamy warunek lub predykat (instrukcja case w Oracle z wieloma warunkami)
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
Oświadczenie o zagnieżdżonej sprawie Oracle
To jest instrukcja przypadku w instrukcji przypadku
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;
Ważne punkty dotyczące prostego i przeszukiwalnego zestawienia Case
(1) Przeszukiwany przypadek CASE ocenia warunki niezależnie w każdej z opcji „kiedy”. Dzięki tej strukturze można zaimplementować znacznie bardziej złożone warunki z wyszukiwanym PRZYPADKIEM niż prostym PRZYPADKIEM.
(2) Przeszukany CASE może łączyć wiele testów przy użyciu kilku kolumn, porównań i operatorów AND/OR.
(3) Zarówno proste, jak i przeszukane konstrukcje CASE, warunki są oceniane sekwencyjnie od góry do dołu, a wykonanie kończy się po znalezieniu pierwszego dopasowania. Załóżmy więc, że spełniony jest więcej niż jeden warunek, tylko pierwsza akcja jest brana pod uwagę.
(4) Oracle Database wykorzystuje ocenę zwarciową. Oznacza to, że w przypadku prostego wyrażenia CASE baza danych ocenia każdą wartość porównania_wyrażenia tylko przed porównaniem jej z wyrażeniem, zamiast oceniać wszystkie wartości porównania_wyraż przed porównaniem którejkolwiek z nich z wyrażeniem. W związku z tym Oracle nigdy nie ocenia wyrażenia_porównania, jeśli poprzednie wyrażenie_porównania jest równe wyrażeniu. Dla przeszukanego wyrażenia CASE baza danych ocenia każdy warunek, aby określić, czy jest on prawdziwy, i nigdy nie ocenia warunku, jeśli poprzedni warunek był prawdziwy
Teraz zobaczmy różnicę między instrukcją Case i Decode
(1) DECODE może działać tylko z wartościami skalarnymi, ale CASE może działać z operatorami logicznymi, predykatami i przeszukiwalnymi podzapytaniami.
Wiemy, że dekodowanie może działać z wartościami skalarnymi. Nie możemy go używać dla operatorów logicznych. Aby to wykorzystać, musimy przekonwertować je na wartości skalarne.
Etui ułatwia cały proces. Możemy łatwo użyć operatora logicznego w instrukcji 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
Powyższe nosi nazwę instrukcji Case z możliwością wyszukiwania
(2) CASE może działać jako konstrukcja PL/SQL, ale DECODE jest używany tylko w instrukcjach SQL. CASE może być używany jako parametr funkcji/procedury.
Przykład
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; /
Klasa V_x jest doskonała.
(3) CASE oczekuje spójności typów danych, DECODE nie.
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 jest zgodny z ANSI SQL. DECODE jest własnością Oracle.
(5) CASE działa szybciej w optymalizatorze niż DECODE.
(6) CASE to instrukcja, podczas gdy DECODE to funkcja.
Powiązane artykuły
Samouczki Oracle sql:Lista wszystkich lekcji dotyczących sql, które można wykorzystać do opanowania sql i wykorzystania w zarządzaniu i manipulacji danymi RDBMS (Oracle, MySql)
Pytania dotyczące Oracle podczas rozmowy kwalifikacyjnej:Sprawdź na tej stronie Top 49 Oracle Wywiad pytania i odpowiedzi :Podstawy , Oracle SQL pomaga w rozmowach kwalifikacyjnych.
Rekordy Oracle PLSQL :Sprawdź ten artykuł o działaniu rekordów Oracle PLSQL . Zapoznaj się również z różnymi sposobami definiowania go i przypisywania mu wartości
Narzędzie programistyczne Oracle SQL:Sprawdź tę stronę, aby uzyskać wszystkie informacje na temat narzędzia programistycznego Oracle sql, Jak pobrać program Oracle sql, jak zainstalować
Funkcje dat Oracle :Sprawdź ten post pod kątem funkcji daty Oracle, różnicy dat Oracle w latach, różnicy dat Oracle w dniach, różnicy dat Oracle w miesiącach.
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expressions004.htm
Polecane kursy
Oto fajny kurs Udemy dotyczący Oracle SQL
Oracle-Sql-Step-by-step :Ten kurs obejmuje podstawowy SQL, złączenia, tworzenie tabel i modyfikowanie ich struktury, tworzenie widoków, łączenie, łączenie i wiele innych rzeczy . Świetny kurs i obowiązkowy kurs dla początkujących SQL
Pełny kurs certyfikacji Oracle SQL :To dobry kurs dla każdego, kto chce być gotowy do pracy w zakresie umiejętności programistycznych SQL. Fajnie objaśniony kurs
Oracle SQL Developer:Essentials, Tips and Tricks :Narzędzie programistyczne Oracle SQL jest używane przez wielu programistów. Ten kurs zawiera sztuczki i lekcje, jak skutecznie z niego korzystać i zostać produktywnym programistą sql
Oracle SQL Performance Tuning Masterclass 2020 :Dostrajanie wydajności jest jedną z najważniejszych i najbardziej poszukiwanych umiejętności. To dobry kurs, aby się o tym dowiedzieć i zacząć dostrajać wydajność sql