sql >> Database teknologi >  >> RDS >> Oracle

Sådan bruger du Decode i Oracle

Introduktion til Oracle sql-afkodning

I dette afsnit vil vi diskutere Oracle-afkodningsbehandling, som er et meget vigtigt aspekt af Oracle sql-sætning

Oracle decode er metoden i Oracle-databasen til at transformere dataværdier fra en værdi til en anden, som er bedre at forstå. Oracle Decode transformerer dataværdier ved hentning.

Det er en type Hvis så andet til behandlingen

Kodeblokken for Oracle sql Decode er nedenfor

decode(udtryk eller kolonnenavn, match, resultat [,match, resultat]...[,standard] )

Her er betydningen af ​​termer i ovenstående kode
a) udtryk eller kolonne er den værdi, der skal sammenlignes
b) match er den værdi, der sammenlignes med udtryk
c) resultatet er den returnerede værdi, hvis udtryk er lig med match
d) er standarden valgfri. Hvis der ikke findes nogen overensstemmelser, vil afkoden returnere standard. Hvis standard er udeladt, vil decode-sætningen returnere NULL (ingen matches fundet).

Eksempel

vælg
afkod (
Fasekode,
'P','Afventer',
'C','Completed',
'T',' Afsluttet',
'S','Standby',
'UKKENDT'
)
fra
FND_REQUESTS;

Her er algoritmen til bedre at forstå det

1) Oracle hent  kolonneværdien for fasekode
2) hvis fasekode ='P'  så afventer
3) hvis fasekode ='C'  så fuldført
4) hvis fasekode ='T'  derefter afsluttet
5) hvis fasekode ='S'  så standby
6) Hvis fasekode ikke er nogen af ​​ovenstående, returnerer afkoden Ukendt
7) Hvis standard ikke er til stede det vil give null

Bemærk, at Oracle-afkodningen starter med at angive kolonnenavnet eller udtrykket , efterfulgt af sæt af matchede par af transformationsværdier. I slutningen af ​​decode-sætningen finder vi en standardværdi. Standardværdien fortæller decode, hvad der skal vises, hvis en kolonneværdi ikke er på den parrede liste.

Vi kunne sige algoritmen på denne måde

if (udtr. ==search1)
return(result1);
elseif (udtr. ==search2)
return( resultat2);
…elseif (udtr. ==søgen)
return(resultn);
else
return(standard);

Nogle flere punkter at huske for Oracle Decode

1) I en DECODE-funktion betragter Oracle to nuller for at være ækvivalente. Hvis expr er null, returnerer Oracle resultatet af den første søgning, som også er null.

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

2) Det maksimale antal komponenter i DECODE-funktionen, inklusive expr, søgninger, resultater og standard, er 255.

3) Oracle konverterer automatisk værdierne for udtryk og compare_value til datatypen for den første compare_value. Også datatypen for return_value konverteres til datatypen for den første return_value. Hvis det første resultat har datatypen CHAR, eller hvis det første resultat er nul, så konverterer Oracle returværdien til datatypen VARCHAR2

Sådan læser du afkodning i Oracle

vi kan læse decode-sætningen som if-else if-sætning. Det første argument i decode-sætningen vil generelt være en kolonne, hvor datatransformation er nødvendig. Argumentet efter det vil være at sammenligne værdierne af det første argument med det

Ofte stillede spørgsmål om Oracle sql Decode-behandling

(1)Vi har set, at "udtr." bliver sidestillet med specificerede værdier. Kan vi bruge ulighedsoperatorer som> eller

Lad os tage et eksempel
SELECT DECODE(salary,<50000, sal + 1000, sal + 500) Final_salary FROM emp;
ERROR at line 2
ORA-00936:missing expression
Så det kan vi ikke bruge. Vi skal bruge en sagserklæring til at gøre det. eller vi kan signere funktion i decode  for at opnå det
SELECT DECODE(sign(salary- 50000), -1,sal + 1000, sal + 500) Final_salary FROM emp;
Grundlæggende skal vi konvertere vores krav om en formel, der kan evalueres til en vis værdi

(2)Hvordan sammenligner man to kolonneværdier ved hjælp af orakelafkodning?

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

(3) Hvad er forskellen mellem Decode og CASE

CASE kan fungere som en PL/SQL-konstruktion, men DECODE bruges kun i SQL-sætninger.CASE kan bruges som en parameter for en funktion/procedure.
CASE forventer datatypekonsistens, DECODE ikke
CASE forventer datatype konsistens, DECODE virker ikke
DECODE kan kun arbejde med skalære værdier, men CASE kan arbejde med logiske operatorer, prædikater og søgbare underforespørgsler.

(4) Har oracle-afkodning en grænse

Ja Det maksimale antal komponenter i DECODE-funktionen, inklusive expr, søgninger, resultater og standard, er 255.

Relaterede links
Oracle-dokumentation om afkodning
hvordan man skriver sql-forespørgsler
Grundlæggende SQL-erklæring
Oracle Case Statement forklaret med tips og eksempler
SQL-selvstudie


  1. AWS RDS:"SQLSTATE[22001] - Data for lange til kolonne" ved hjælp af MariaDB 10.2

  2. Almindelige MySql-interviewspørgsmål og svar for friskere og erfarne

  3. Sådan konverteres DateTime til VarChar

  4. mysql to kolonne primær nøgle med auto-increment