sql >> Databasteknik >  >> RDS >> Oracle

Oracle Case Statement förklaras med tips och exempel

Vi har sett hur Oracle Decode-behandling fungerar i föregående inlägg

Oracle sql-avkodningsbearbetning

Låt oss nu se hur Oracle-fallsuttalanden behandlas

Fallbeskrivning i Oracle

Det liknar Decode-satsen. Databaser före Oracle 8.1.6 hade bara funktionen DECODE. CASE introducerades i Oracle 8.1.6 som en standard, mer meningsfull och kraftfullare funktion.

Allt som DECODE kan göra, kan CASE också. Det finns dock mycket annat som CASE kan göra, vilket DECODE inte kan. Vi går igenom detaljerade exempel i den här artikeln

Låt oss börja 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

uttryck är valfritt

Vi kan dela upp ärendeutlåtandet i två kategorier Enkelt fallutlåtande och Sökbart fallutlåtande

Enkel case-sats är precis som Decode-funktionen.

Exempel med enkel CASE-sats

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ökbar Case-sats är case-sats där vi anger ett villkor eller predikat (case-sats i Oracle med flera villkor)

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

Nested Oracle Case statement

Detta är fallbeskrivning i ärendebeskrivningen

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;

Viktiga punkter om enkel och sökbar ärendebeskrivning

(1) Det sökta CASE-fallet utvärderar villkoren oberoende under vart och ett av "när"-alternativen. Med denna struktur kan mycket mer komplexa villkor implementeras med ett sökt CASE än ett enkelt CASE.

(2) Ett sökt CASE kan kombinera flera tester med flera kolumner, jämförelser och OCH/ELLER-operatorer.

(3) Både enkla och genomsökta CASE-konstruktioner, villkoren utvärderas sekventiellt från topp till botten, och exekveringsutgångar efter den första matchningen hittas. Så anta att mer än ett villkor är sant, bara den första åtgärden beaktas.

(4) Oracle Database använder kortslutningsutvärdering. Det vill säga, för ett enkelt CASE-uttryck utvärderar databasen varje comparison_expr-värde endast innan det jämförs med expr, snarare än att utvärdera alla comparison_expr-värden innan någon av dem jämförs med expr. Följaktligen utvärderar Oracle aldrig en comparison_expr om en tidigare comparison_expr är lika med expr. För ett sökt CASE-uttryck utvärderar databasen varje villkor för att avgöra om det är sant, och utvärderar aldrig ett villkor om det tidigare villkoret var sant

Låt oss nu se skillnaden mellan Case och Decode-sats

(1) DECODE kan endast fungera med skalära värden, men CASE kan arbeta med logiska operatorer, predikat och sökbara underfrågor.

Vi vet att avkodning kan fungera med skalära värden. Vi kan inte använda det för logiska operatorer. Vi måste omvandla det till skalära värden för att kunna använda det.

Case gör hela processen enklare. Vi kan enkelt använda 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

Ovanstående kallas sökbara Case statements

(2) CASE kan fungera som en PL/SQL-konstruktion men DECODE används endast i SQL-satser. CASE kan användas som en parameter för en funktion/procedur.

Exempel

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

Betyg V_x är utmärkt.

(3) CASE förväntar sig datatypkonsistens, DECODE gör det inte.

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 överensstämmer med ANSI SQL. DECODE ägs av Oracle.

(5) CASE körs snabbare i optimeraren än vad DECODE gör.

(6) CASE är en sats medan DECODE är en funktion.

Relaterade artiklar
Oracle sql tutorials:Lista över alla sql tutorial lektioner som kan användas för att bemästra sql och använda i RDBMS (Oracle, MySql) datahantering och manipulation
Oracle intervjufrågor:Kolla in den här sidan för topp 49 Frågor och svar på Oracle-intervjuer :Grunderna , Oracle SQL för att hjälpa dig i intervjuer.
oracle PLSQL-poster :Kolla in den här artikeln om hur oracle PLSQL-poster fungerar. Ta också reda på de olika sätten att definiera det och tilldela värde till det
Oracle SQL-utvecklarverktyg:Kolla in den här sidan för all information om Oracle sql-utvecklarverktyget,Hur man laddar ner Oracle sql-utvecklare, hur man installerar
oracle-datumfunktioner :Kolla in det här inlägget för oracle-datumfunktioner, oracle-datumskillnad i år, oracle-datumskillnad i dagar, oracle-datumskillnad i månader.
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expressions004.htm

Rekommenderade kurser

Här är den trevliga Udemy-kursen för Oracle SQL
Oracle-Sql-Steg-för-steg :Den här kursen täcker grundläggande sql, går med, skapar tabeller och ändrar dess struktur, Skapa vy, Union, Union -allt och mycket annat . En bra kurs och måste-kurs för SQL-startare
The Complete Oracle SQL Certification Course :Det här är en bra kurs för alla som vill vara redo för SQL-utvecklare. En trevlig förklarad kurs
Oracle SQL Developer:Essentials, Tips and Tricks :Utvecklarverktyget Oracle Sql används av många utvecklare. Den här kursen ger oss tricks och lektioner om hur man effektivt använder den och blir en produktiv SQL-utvecklare
Oracle SQL Performance Tuning Masterclass 2020 :Prestandajustering är en av de kritiska och mest eftertraktade färdigheterna. Det här är en bra kurs för att lära dig om det och börja göra sql-prestandajustering


  1. När ska man använda SELECT ... FÖR UPPDATERING?

  2. 4 sätt att välja dubbletter av rader i PostgreSQL

  3. ROUND(datum) Funktion i Oracle

  4. ExecuteBatch-metoden returnerar array med värdet -2 i java