sql >> Databasteknik >  >> RDS >> Oracle

Hur man använder Decode i Oracle

Introduktion till Oracle sql-avkodning

I det här avsnittet kommer vi att diskutera om Oracle-avkodningsbearbetning som är en mycket viktig aspekt av Oracle sql-satsen

Oracle avkodning är metoden i Oracle-databasen för att omvandla datavärden från ett värde till ett annat som är bättre att förstå. Oracle Decode transformerar datavärden vid hämtningstidpunkten.

Det är en typ av Om så annat för bearbetningen

Kodblocket för Oracle sql Decode finns nedan

avkoda(uttryck eller kolumnnamn, matchning, resultat [,matchning, resultat]...[,standard] )

Här är betydelsen av termer i ovanstående kod
a) uttryck eller kolumn är värdet som ska jämföras
b) matchning är värdet som jämförs med uttryck
c) resultatet är värdet som returneras, om uttryck är lika med matchning
d) är standard valfritt. Om inga matchningar hittas kommer avkodningen att returnera standard. Om standard utelämnas kommer avkodningssatsen att returnera NULL (inga matchningar hittades).

Exempel

välj
avkoda (
Faskod,
'P','Pending',
'C','Completed',
'T',' Avslutad',
'S','Standby',
'OKNÖN'
)
från
FND_REQUESTS;

Här är algoritmen för att bättre förstå det

1) Oracle hämta kolumnvärdet för faskod
2) om faskod ='P'  sedan väntande
3) om faskod ='C'  sedan slutförd
4) om faskod ='T'  sedan avslutad
5) om Faskod ='S'  sedan Standby
6) Om Faskoden inte är någon av ovanstående returnerar avkodningen Okänd
7) Om standard inte finns tillgänglig det ger null

Observera att Oracle-avkodning börjar med att ange kolumnnamnet eller uttrycket följt av en uppsättning matchade par av transformationsvärden. I slutet av avkodningssatsen hittar vi ett standardvärde. Standardvärdet talar om för avkodning vad som ska visas om ett kolumnvärde inte finns i den parade listan.

Vi skulle kunna säga algoritmen så här

if (expr ==search1)
return(result1);
elseif (expr ==search2)
return( resultat2);
…elseif (expr ==sökn)
return(resultn);
else
return(default);

Några fler punkter att komma ihåg för Oracle Decode

1) I en DECODE-funktion anser Oracle att två nollor är likvärdiga. Om expr är null, returnerar Oracle resultatet av den första sökningen som också är null.

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

2) Det maximala antalet komponenter i DECODE-funktionen, inklusive expr, sökningar, resultat och standard, är 255.

3) Oracle konverterar automatiskt värdena för uttryck och compare_value till datatypen för det första compare_value. Även datatypen för return_value konverteras till datatypen för det första return_value. Om det första resultatet har datatypen CHAR eller om det första resultatet är null, konverterar Oracle returvärdet till datatypen VARCHAR2

Hur man läser avkodning i Oracle

vi kan läsa decode-satsen som if-else if-sats. Det första argumentet i avkodningssatsen kommer vanligtvis att vara någon kolumn där datatransformation behövs. Argumentet efter det kommer att jämföra värdena för det första argumentet med det

Vanliga frågor om Oracle sql Decode-bearbetning

(1)Vi har sett att "expr" likställs med specificerade värden. Kan vi använda olikhetsoperatorer som> eller

Låt oss ta ett exempel
SELECT DECODE(lön,<50 000, sal + 1000, sal + 500) Final_salary FROM emp;
ERROR at line 2
ORA-00936:missing expression
Så det kan vi inte använda. Vi måste använda en fallbeskrivning för att göra det. eller så kan vi teckenfunktion i avkoda  för att uppnå det
SELECT DECODE(tecken(lön- 50000), -1,sal + 1000, sal + 500) Final_salary FROM emp;
I grund och botten måste vi konvertera vår krav på någon formel som kan utvärderas till något värde

(2)Hur jämför man två kolumnvärden med Oracle-avkodning?

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

(3) Vad är skillnaden mellan Decode och CASE

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.
CASE förväntar sig datatypkonsistens, DECODE gör det inte
CASE förväntar sig datatyp konsistens, DECODE fungerar inte
DECODE kan bara fungera med skalära värden men CASE kan fungera med logiska operatorer, predikat och sökbara underfrågor.

(4) Har oracle-avkodning en gräns

Ja Det maximala antalet komponenter i DECODE-funktionen, inklusive expr, sökningar, resultat och standard, är 255.

Relaterade länkar
Oracle-dokumentation om avkodning
hur man skriver SQL-frågor
Grundläggande SQL-uttalande
Oracle Case Statement förklaras med tips och exempel
SQL-handledning


  1. MuleSoft omfamnar GraphQL till avancerad API-integration

  2. Hur ställer jag in en maximal körningstid för en mysql-fråga?

  3. LINQ för Java-verktyg

  4. Hur uppdaterar jag Identity Column i SQL Server?