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