sql >> Database >  >> RDS >> Oracle

Oracle Case Statement uitgelegd met tips en voorbeelden

We hebben de werking van Oracle Decode-verwerking gezien in de vorige post

Oracle sql-decoderingsverwerking

Laten we nu eens kijken naar de verwerking van Oracle Case-statements

Case-instructie in Oracle

Het is vergelijkbaar met de Decode-instructie. Databases vóór Oracle 8.1.6 hadden alleen de DECODE-functie. CASE werd geïntroduceerd in Oracle 8.1.6 als een standaard, meer betekenisvolle en krachtigere functie.

Alles wat DECODE kan, kan CASE ook. Er is echter nog veel meer dat CASE kan doen, wat DECODE niet kan. We zullen in dit artikel gedetailleerde voorbeelden bespreken

Laten we beginnen met de Case-statement Syntaxis

CASE [expression]

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

else value_n
end

uitdrukking is optioneel

We kunnen de Case-instructie in twee categorieën onderverdelen:Simple Case-statement en Doorzoekbare case-statement

Eenvoudig hoofdlettergebruik is net als de functie Decoderen.

Voorbeeld met Simple CASE-instructie

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

Doorzoekbare Case-instructie is case-instructie waarbij we een voorwaarde of predikaat specificeren (case-instructie in orakel met meerdere voorwaarden)

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

Instructie geneste Oracle Case

Dit is een casusverklaring binnen de casusverklaring

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;

Belangrijke punten over een eenvoudige en doorzoekbare Case-verklaring

(1) De gezochte CASE evalueert de voorwaarden onafhankelijk onder elk van de "wanneer"-opties. Met deze structuur kunnen veel complexere voorwaarden worden geïmplementeerd met een gezochte CASE dan een eenvoudige CASE.

(2) Een gezochte CASE kan meerdere tests combineren met behulp van verschillende kolommen, vergelijkingen en AND/OR-operators.

(3) Zowel eenvoudige als gezochte CASE-constructies, de voorwaarden worden opeenvolgend van boven naar beneden geëvalueerd en de uitvoering wordt beëindigd nadat de eerste overeenkomst is gevonden. Dus stel dat meer dan één voorwaarde waar is, alleen de eerste actie wordt overwogen.

(4) Oracle Database maakt gebruik van kortsluitingsevaluatie. Dat wil zeggen, voor een eenvoudige CASE-expressie evalueert de database elke vergelijkings_uitdr-waarde alleen voordat deze wordt vergeleken met expr, in plaats van alle vergelijkings_uitdr-waarden te evalueren voordat ze worden vergeleken met expr. Daarom evalueert Oracle nooit een vergelijkingsuitdr als een eerdere vergelijkingsuitdr gelijk is aan expr. Voor een gezochte CASE-expressie evalueert de database elke voorwaarde om te bepalen of deze waar is, en evalueert nooit een voorwaarde als de vorige voorwaarde waar was

Laten we nu het verschil zien tussen Case en Decode-statement

(1) DECODE kan alleen werken met scalaire waarden, maar CASE kan werken met logische operators, predikaten en doorzoekbare subquery's.

We weten dat decoderen kan werken met scalaire waarden. We kunnen het niet gebruiken voor logische operatoren. We moeten het omzetten in scalaire waarden om daar gebruik van te maken.

Case maakt het hele proces gemakkelijker. We kunnen gemakkelijk de logische operator gebruiken in de Case-instructie

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

Het bovenstaande wordt doorzoekbare Case-statements genoemd

(2) CASE kan werken als een PL/SQL-constructie, maar DECODE wordt alleen gebruikt in SQL-instructies.CASE kan worden gebruikt als een parameter van een functie/procedure.

Voorbeeld

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

Cijfer V_x is Uitstekend.

(3) CASE verwacht consistentie van datatypes, DECODE niet.

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 voldoet aan ANSI SQL. DECODE is eigendom van Oracle.

(5) CASE wordt sneller uitgevoerd in de optimizer dan DECODE.

(6) CASE is een statement terwijl DECODE een functie is.

Verwante artikelen
Oracle sql-zelfstudies:een overzicht van alle sql-zelfstudielessen die kunnen worden gebruikt om sql onder de knie te krijgen en te gebruiken in RDBMS (Oracle, MySql) gegevensbeheer en -manipulatie
Oracle-interviewvragen:bekijk deze pagina voor Top 49 Oracle Interview vragen en antwoorden:Basiskennis, Oracle SQL om u te helpen bij interviews.
oracle PLSQL-records:lees dit artikel over de werking van Oracle PLSQL-records. Ontdek ook de verschillende manieren om het te definiëren en er waarde aan toe te kennen
Oracle SQL-ontwikkelaarstool:bekijk deze pagina voor alle informatie over de Oracle sql-ontwikkelaarstool, hoe u Oracle sql-ontwikkelaars downloadt, hoe te installeren Oracle-datumfuncties:bekijk dit bericht voor Oracle-datumfuncties, Oracle-datumverschil in jaren, Oracle-datumverschil in dagen, Oracle-datumverschil in maanden.
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expressions004.htm

Aanbevolen cursussen

Hier is de mooie Udemy-cursus voor Oracle SQL
Oracle-Sql-Step-voor-stap:deze cursus behandelt basis-sql, joins, tabellen maken en de structuur wijzigen, weergave maken, Union, Union -alles en nog veel meer . Een geweldige cursus en een must-have cursus voor SQL-starters
De complete Oracle SQL-certificeringscursus :Dit is een goede cursus voor iedereen die Job-klaar wil zijn voor SQL-ontwikkelaarsvaardigheden. Een mooi uitgelegde cursus
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-ontwikkelaarstool wordt door veel ontwikkelaars gebruikt. Deze cursus geeft ons trucs en lessen om het effectief te gebruiken en een productieve sql-ontwikkelaar te worden
Oracle SQL Performance Tuning Masterclass 2020 :Het afstemmen van prestaties is een van de belangrijkste en meest gezochte vaardigheden. Dit is een goede cursus om erover te leren en te beginnen met het afstemmen van sql-prestaties


  1. Oracle 21c verbinden met SQL Server

  2. Oracle Doorzoek alle tabellen alle kolommen op string

  3. 2 manieren om de servernaam in SQL Server (T-SQL) te retourneren

  4. Het is tijd dat we de Microsoft Access IDE wat liefde geven