Wir haben im vorherigen Post gesehen, wie die Oracle Decode-Verarbeitung funktioniert
Oracle SQL-Decodierungsverarbeitung
Sehen wir uns nun die Verarbeitung von Oracle Case-Anweisungen an
Case-Anweisung in Oracle
Sie ähnelt der Decode-Anweisung. Datenbanken vor Oracle 8.1.6 hatten nur die DECODE-Funktion. CASE wurde in Oracle 8.1.6 als aussagekräftigere und leistungsfähigere Standardfunktion eingeführt.
Alles, was DECODE kann, kann auch CASE. CASE kann jedoch noch viel mehr, was DECODE nicht kann. Wir werden in diesem Artikel detaillierte Beispiele durchgehen
Beginnen wir mit der Syntax der Case-Anweisung
CASE [expression] when condition_1 then value_1 when condition_2 then value_2 when condition_2 then value_2 …. else value_n end
Ausdruck ist optional
Wir können die Case-Anweisung in zwei Kategorien unterteilen:Einfache Case-Anweisung und durchsuchbare Case-Anweisung
Simple case-Anweisung ist genau wie Decode-Funktion.
Beispiel mit einfacher CASE-Anweisung
select case region when ‘N’ then ’North’ when ‘S’ then ’South’ when ‘E’ then ’East’, when ‘W’ then ’West’ else ‘UNKNOWN’ end from customer;
Durchsuchbare Case-Anweisungen sind Case-Anweisungen, in denen wir eine Bedingung oder ein Prädikat angeben (Case-Anweisung in Oracle mit mehreren Bedingungen)
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
Verschachtelte Oracle Case-Anweisung
Dies ist die Case-Anweisung innerhalb der Case-Anweisung
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;
Wichtige Punkte zur einfachen und durchsuchbaren Fallerklärung
(1) Der gesuchte FALL wertet die Bedingungen unter jeder der "Wann"-Optionen unabhängig aus. Mit dieser Struktur können mit einem gesuchten CASE weitaus komplexere Bedingungen umgesetzt werden als mit einem einfachen CASE.
(2) Ein gesuchter CASE kann mehrere Tests kombinieren, indem mehrere Spalten, Vergleiche und UND/ODER-Operatoren verwendet werden.
(3) Sowohl bei einfachen als auch bei durchsuchten CASE-Konstrukten werden die Bedingungen sequentiell von oben nach unten ausgewertet und Ausführungsausgänge nach der ersten Übereinstimmung gefunden. Angenommen, mehr als eine Bedingung ist wahr, wird nur die erste Aktion berücksichtigt.
(4) Oracle Database verwendet eine Kurzschlussauswertung. Das heißt, für einen einfachen CASE-Ausdruck wertet die Datenbank jeden Vergleichs-Ausdruck-Wert nur aus, bevor sie ihn mit Ausdruck vergleicht, anstatt alle Vergleichs-Ausdruck-Werte auszuwerten, bevor irgendeiner von ihnen mit Ausdruck verglichen wird. Folglich wertet Oracle nie einen Vergleichsausdruck aus, wenn ein vorheriger Vergleichsausdruck gleich Ausdruck ist. Für einen gesuchten CASE-Ausdruck wertet die Datenbank jede Bedingung aus, um festzustellen, ob sie wahr ist, und wertet niemals eine Bedingung aus, wenn die vorherige Bedingung wahr war
Sehen wir uns nun den Unterschied zwischen der Case- und der Decode-Anweisung an
(1) DECODE kann nur mit Skalarwerten arbeiten, aber CASE kann mit logischen Operatoren, Prädikaten und durchsuchbaren Unterabfragen arbeiten.
Wir wissen, dass decode mit skalaren Werten arbeiten kann. Wir können es nicht für logische Operatoren verwenden. Wir müssen es in skalare Werte umwandeln, um davon Gebrauch zu machen.
Case macht den gesamten Prozess einfacher. Wir können den logischen Operator einfach in der Case-Anweisung verwenden
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
Das Obige wird als durchsuchbare Case Statements bezeichnet
(2) CASE kann als PL/SQL-Konstrukt arbeiten, aber DECODE wird nur in SQL-Anweisungen verwendet. CASE kann als Parameter einer Funktion/Prozedur verwendet werden.
Beispiel
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; /
Klasse V_x ist ausgezeichnet.
(3) CASE erwartet Datentypkonsistenz, DECODE nicht.
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 entspricht ANSI SQL. DECODE ist Eigentum von Oracle.
(5) CASE wird im Optimierer schneller ausgeführt als DECODE.
(6) CASE ist eine Anweisung, während DECODE eine Funktion ist.
Verwandte Artikel
Oracle SQL-Tutorials:Liste aller SQL-Tutorial-Lektionen, die verwendet werden können, um SQL zu beherrschen und in RDBMS (Oracle, MySql) Datenverwaltung und -manipulation zu verwenden
Oracle-Interviewfragen:Auf dieser Seite finden Sie die Top 49 Fragen und Antworten zu Oracle-Interviews:Grundlagen, Oracle SQL zur Unterstützung bei Vorstellungsgesprächen.
Oracle PLSQL-Datensätze:Sehen Sie sich diesen Artikel über die Funktionsweise von Oracle PLSQL-Datensätzen an. Informieren Sie sich auch über die verschiedenen Möglichkeiten, es zu definieren und ihm einen Wert zuzuweisen.
Oracle SQL-Entwicklertool:Auf dieser Seite finden Sie alle Informationen zum Oracle-SQL-Entwicklertool, Anleitung zum Herunterladen von Oracle-SQL-Entwicklern und Installation
Orakel-Datumsfunktionen :Sehen Sie sich diesen Beitrag für Orakel-Datumsfunktionen, Orakel-Datumsunterschied in Jahren, Orakel-Datumsunterschied in Tagen, Orakel-Datumsunterschied in Monaten an.
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expressions004.htm
Empfohlene Kurse
Hier ist der nette Udemy-Kurs für Oracle SQL
Oracle-Sql-Schritt-für-Schritt :Dieser Kurs behandelt grundlegendes SQL, Joins, Erstellen von Tabellen und Ändern ihrer Struktur, Erstellen von Ansichten, Union, Union -all und vieles mehr . Ein großartiger Kurs und ein Muss für SQL-Einsteiger
Der vollständige Oracle SQL-Zertifizierungskurs :Dies ist ein guter Kurs für jeden, der für SQL-Entwicklerfähigkeiten berufsbereit werden möchte. Ein gut erklärter Kurs
Oracle SQL Developer:Grundlagen, Tipps und Tricks :Das Oracle Sql-Entwicklertool wird von vielen Entwicklern verwendet. Dieser Kurs gibt uns Tricks und Lektionen, wie man es effektiv nutzt und ein produktiver SQL-Entwickler wird
Oracle SQL Performance Tuning Masterclass 2020 :Leistungsoptimierung ist eine der kritischsten und gefragtesten Fähigkeiten. Dies ist ein guter Kurs, um mehr darüber zu erfahren und mit der Optimierung der SQL-Leistung zu beginnen