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