sql >> Database teknologi >  >> RDS >> Oracle

Oracle Case Statement forklaret med tips og eksempler

Vi har set arbejdet med Oracle Decode-behandling i det forrige indlæg

Oracle sql-afkodningsbehandling

Lad os nu se behandlingen af ​​Oracle-sagserklæring

Sagsudtalelse i Oracle

Det ligner Decode-sætningen. Databaser før Oracle 8.1.6 havde kun funktionen DECODE. CASE blev introduceret i Oracle 8.1.6 som en standard, mere meningsfuld og mere kraftfuld funktion.

Alt, hvad DECODE kan, kan CASE også. Der er dog meget andet CASE kan gøre, som DECODE ikke kan. Vi gennemgår detaljerede eksempler i denne artikel

Lad os starte med Case statement Syntax

CASE [expression]

when condition_1 then value_1
when condition_2 then value_2
when condition_2 then value_2
….

else value_n
end

udtryk er valgfrit

Vi kan opdele Case redegørelsen i to kategorier Simple Case statement og Searchable case statement

Simpel kasussætning er ligesom Decode-funktionen.

Eksempel med Simple CASE-sætning

select
case
region
when ‘N’ then ’North’
when ‘S’ then ’South’
when ‘E’ then ’East’,
when ‘W’ then ’West’
else ‘UNKNOWN’
end
from
customer;

Søgbar case-sætning er case-sætning, hvor vi specificerer en betingelse eller prædikat (case-sætning i oracle med flere betingelser)

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

Indlejret Oracle-sagserklæring

Dette er sagsfremstilling i sagsfremstillingen

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;

Vigtige punkter om enkel og søgbar sagserklæring

(1) Den søgte CASE vurderer betingelserne uafhængigt under hver af "hvornår"-mulighederne. Med denne struktur kan langt mere komplekse forhold implementeres med en søgt CASE end en simpel CASE.

(2) En søgt CASE kan kombinere flere test ved hjælp af flere kolonner, sammenligninger og OG/ELLER-operatorer.

(3) Både simple og søgte CASE-konstruktioner, betingelserne evalueres sekventielt fra top til bund, og udførelsesudgange efter det første match er fundet. Så antag, at mere end én betingelse er sand, er det kun den første handling, der tages i betragtning.

(4) Oracle Database bruger kortslutningsevaluering. Det vil sige, at for et simpelt CASE-udtryk, evaluerer databasen kun hver comparison_expr-værdi, før den sammenlignes med expr, i stedet for at evaluere alle comparison_expr-værdier, før den sammenligner nogen af ​​dem med expr. Som følge heraf evaluerer Oracle aldrig en comparison_expr, hvis en tidligere comparison_expr er lig med expr. For et søgt CASE-udtryk evaluerer databasen hver betingelse for at afgøre, om den er sand, og evaluerer aldrig en betingelse, hvis den tidligere betingelse var sand.

Lad os nu se forskellen mellem Case og Decode-sætning

(1) DECODE kan kun arbejde med skalære værdier, men CASE kan arbejde med logiske operatorer, prædikater og søgbare underforespørgsler.

Vi ved, at afkodning kan arbejde med skalære værdier. Vi kan ikke bruge det til logiske operatorer. Vi er nødt til at konvertere det til skalære værdier for at gøre brug af det.

Case gør hele processen nemmere. Vi kan nemt bruge logisk operator i Case statement

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

Ovenstående kaldes søgbare Case statements

(2) CASE kan fungere som en PL/SQL-konstruktion, men DECODE bruges kun i SQL-sætninger. CASE kan bruges som en parameter for en funktion/procedure.

Eksempel

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;
/

Karakter V_x er fremragende.

(3) CASE forventer datatypekonsistens, det gør DECODE ikke.

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 overholder ANSI SQL. DECODE er ejet af Oracle.

(5) CASE udføres hurtigere i optimizeren end DECODE.

(6) CASE er en sætning, mens DECODE er en funktion.

Relaterede artikler
Oracle sql Tutorials :Liste over alle sql tutorial lektioner, som kan bruges til at mestre sql og bruge i RDBMS (Oracle, MySql) datahåndtering og manipulation
Oracle interview spørgsmål:Tjek denne side for Top 49 Spørgsmål og svar til Oracle-interview :Grundlæggende , Oracle SQL for at hjælpe dig i interviews.
oracle PLSQL-poster :Se denne artikel om, hvordan oracle PLSQL-poster fungerer. Find også ud af de forskellige måder at definere det på og tildele værdi til det
Oracle SQL-udviklerværktøj:Tjek denne side for at få alle oplysninger om Oracle sql-udviklerværktøjet, hvordan man downloader Oracle sql-udvikler, hvordan man installerer
oracle-datofunktioner:Tjek dette indlæg for oracle-datofunktioner, oracle-datoforskel i år, oracle-datoforskel i dage, oracle-datoforskel i måneder.
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expressions004.htm

Anbefalede kurser

Her er det fine Udemy-kursus til Oracle SQL
Oracle-Sql-trin-for-trin :Dette kursus dækker grundlæggende sql, joins, oprettelse af tabeller og ændring af strukturen, Create View, Union, Union -alle og meget andet. . Et godt kursus og must-have kursus for SQL starter
The Complete Oracle SQL Certification Course :Dette er et godt kursus for enhver, der ønsker at være jobklar til SQL-udviklerfærdigheder. Et godt forklaret kursus
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-udviklerværktøj bliver brugt af mange udviklere. Dette kursus giver os tricks og lektioner til, hvordan man effektivt bruger det og bliver en produktiv sql-udvikler
Oracle SQL Performance Tuning Masterclass 2020 :Ydeevnejustering er en af ​​de kritiske og mest søgte færdigheder. Dette er et godt kursus for at lære om det og begynde at lave sql-ydelsesjustering


  1. Udfør en lagret procedure i en anden lagret procedure i SQL server

  2. slet dublerede rækker fra Oracle

  3. Gruppevist maksimum

  4. Hvordan kan jeg starte PostgreSQL på Windows?