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

So verwenden Sie Decode in Oracle

Einführung in Oracle SQL-Decodierung

In diesem Abschnitt besprechen wir die Oracle-Decodierungsverarbeitung, die ein sehr wichtiger Aspekt der Oracle-SQL-Anweisung ist

Oracle decode ist die Methode in der Oracle-Datenbank, um Datenwerte von einem Wert in einen anderen umzuwandeln, was besser zu verstehen ist. Oracle Decode transformiert Datenwerte zum Zeitpunkt des Abrufs.

Es ist eine Art If then else für die Verarbeitung

Der Codeblock für Oracle SQL Decode ist unten

decode(Ausdruck oder Spaltenname, Übereinstimmung, Ergebnis [,Übereinstimmung, Ergebnis]…[,Standard] )

Hier ist die Bedeutung der Begriffe im obigen Code
a) Ausdruck oder Spalte  ist der zu vergleichende Wert
b) Übereinstimmung ist der Wert, der mit dem Ausdruck verglichen wird
c) Ergebnis ist der zurückgegebene Wert, if expression is equal to match
d) default ist optional. Wenn keine Übereinstimmungen gefunden werden, gibt die Dekodierung den Standardwert zurück. Wenn default weggelassen wird, gibt die decode-Anweisung NULL zurück (keine Übereinstimmungen gefunden).

Beispiel

select
decode (
Phase Code,
'P','Pending',
'C','Completed',
'T',' Beendet',
'S','Standby',
'UNKNOWN'
)
von
FND_REQUESTS;

Hier ist der Algorithmus, um ihn besser zu verstehen

1) Oracle ruft den Spaltenwert des Phasencodes ab
2) wenn Phasencode =„P“, dann ausstehend
3) wenn Phasencode =„C“, dann abgeschlossen
4) wenn Phasencode ='T', dann Terminated
5) wenn Phasencode ='S', dann Standby
6) Wenn Phasencode keiner der oben genannten ist, gibt die Dekodierung Unknown zurück
7) Wenn Standard nicht vorhanden ist es wird null geben

Beachten Sie, dass die Oracle-Decodierung mit der Angabe des Spaltennamens oder -ausdrucks beginnt, gefolgt von einem Satz übereinstimmender Transformationswertepaare. Am Ende der decode-Anweisung finden wir einen Standardwert. Der Standardwert teilt der Decodierung mit, was angezeigt werden soll, wenn sich ein Spaltenwert nicht in der Paarliste befindet.

Wir könnten den Algorithmus so sagen

if (expr ==search1)
return(result1);
elseif (expr ==search2)
return( result2);
…elseif (expr ==searchn)
return(resultn);
else
return(default);

Einige weitere Punkte, die Sie sich für Oracle Decode merken sollten

1) In einer DECODE-Funktion betrachtet Oracle zwei Nullen als gleichwertig. Wenn expr null ist, gibt Oracle das Ergebnis der ersten Suche zurück, das ebenfalls null ist.

SQL> SELECT decode(null,null,1,0) FROM dual;
DECODE(NULL,NULL,1,0)
———————
1

2) Die maximale Anzahl von Komponenten in der DECODE-Funktion, einschließlich expr, searchs, results und default, beträgt 255.

3) Oracle wandelt die Werte für Ausdruck und Vergleichswert automatisch in den Datentyp des ersten Vergleichswerts um. Auch der Datentyp des return_value wird in den Datentyp des ersten return_value konvertiert. Hat das erste Ergebnis den Datentyp CHAR oder ist das erste Ergebnis null, dann wandelt Oracle den Rückgabewert in den Datentyp VARCHAR2

um

So lesen Sie die Dekodierung in Oracle

wir können die Dekodierungsanweisung als if-else if-Anweisung lesen. Das erste Argument in der Dekodierungsanweisung ist im Allgemeinen eine Spalte, in der eine Datentransformation erforderlich ist. Das Argument danach vergleicht die Werte des ersten Arguments damit

FAQ zur Oracle SQL Decode-Verarbeitung

(1)Wir haben gesehen, dass „expr“ mit bestimmten Werten gleichgesetzt wird. Können wir Ungleichheitsoperatoren wie> oder verwenden

Nehmen wir ein Beispiel
SELECT DECODE(salary,<50000, sal + 1000, sal + 500) Final_salary FROM emp;
ERROR at line 2
ORA-00936:missing expression
Also können wir das nicht verwenden. Dazu müssen wir eine Case-Anweisung verwenden. oder wir können die Funktion in decode signieren, um sie zu erreichen
SELECT DECODE(sign(salary- 50000), -1,sal + 1000, sal + 500) Final_salary FROM emp;
Grundsätzlich müssen wir unsere umwandeln Anforderung an eine Formel, die einen bestimmten Wert ergeben kann

(2)Wie vergleiche ich zwei Spaltenwerte mit Oracle-Decodierung?

SELECT col1,col2 decode( abs(col1-col2), 0, ‘col1 =col2’, Col1-col2, ‘col1> col2’,’col1 FROM example_tab;

(3) Was ist der Unterschied zwischen Decode und CASE

CASE kann als PL/SQL-Konstrukt arbeiten, aber DECODE wird nur in SQL-Anweisungen verwendet. CASE kann als Parameter einer Funktion/Prozedur verwendet werden.
CASE erwartet Datentypkonsistenz, DECODE nicht
CASE erwartet Datentyp Konsistenz, DECODE nicht
DECODE kann nur mit Skalarwerten arbeiten, aber CASE kann mit logischen Operatoren, Prädikaten und durchsuchbaren Unterabfragen arbeiten.

(4) Hat die Oracle-Decodierung eine Grenze

Ja Die maximale Anzahl von Komponenten in der DECODE-Funktion, einschließlich Ausdruck, Suchen, Ergebnisse und Standard, beträgt 255.

Verwandte Links
Oracle-Dokumentation zum Decodieren
wie man SQL-Abfragen schreibt
Grundlegende SQL-Anweisung
Oracle Case-Anweisung erklärt mit Tipps und Beispielen
SQL-Tutorial