Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle Case Statement mit Tipps und Beispielen erklärt

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