Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Opis przypadku Oracle z poradami i przykładami

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw CLOB do bazy danych Oracle

  2. Jak uzyskać liczbę wierszy, których dotyczy instrukcja, gdy znajduje się w wyzwalaczu tego oświadczenia?

  3. ORA-00900:nieprawidłowa instrukcja SQL- po uruchomieniu procedury w oracle 10g

  4. Klaster SQL Server z perspektywy Oracle RAC

  5. Baza danych Oracle wisi w nieskończoność w zapytaniach UPDATE