sql >> Database >  >> RDS >> Oracle

Hoe decoderen in Oracle te gebruiken

Inleiding tot Oracle SQL-decodering

In deze sectie zullen we het hebben over Oracle-decoderingsverwerking, wat een zeer belangrijk aspect is van de Oracle SQL-instructie

Oracle decoderen is de methode in de Oracle-database om gegevenswaarden van de ene waarde naar de andere te transformeren, wat beter te begrijpen is. Oracle Decode transformeert gegevenswaarden tijdens het ophalen.

Het is een soort Als dan anders voor de verwerking

Het codeblok voor Oracle sql Decode staat hieronder

decoderen(uitdrukking of kolomnaam, overeenkomst, resultaat [,overeenkomst, resultaat]…[,default] )

Dit is de betekenis van termen in bovenstaande code
a) uitdrukking of kolom  is de waarde die moet worden vergeleken
b) overeenkomst is de waarde die wordt vergeleken met uitdrukking
c) resultaat is de geretourneerde waarde, als expressie gelijk is aan match
d) standaard is optioneel. Als er geen overeenkomsten worden gevonden, wordt de decodering standaard geretourneerd. Als standaard wordt weggelaten, retourneert de decodeeropdracht NULL (geen overeenkomsten gevonden).

Voorbeeld

select
decoderen (
Fase Code,
'P','Pending',
'C','Completed',
'T',' Beëindigd',
'S','Standby',
'ONBEKEND'
)
van
FND_REQUESTS;

Hier is het algoritme om het beter te begrijpen

1) Oracle haalt de kolomwaarde op van Fasecode
2) if Phase code ='P'  then Pending
3) if Phase code ='C'  then Completed
4) if Phase code ='T'  dan Beëindigd
5) als Fasecode ='S' dan Standby
6) Als Fasecode geen van de bovenstaande is, retourneert de decodering Onbekend
7) Als de standaardwaarde niet aanwezig is het geeft null

Merk op dat Oracle-decodering begint met het specificeren van de kolomnaam of uitdrukking , gevolgd door een reeks overeenkomende paren transformatiewaarden. Aan het einde van de decodeeropdracht vinden we een standaardwaarde. De standaardwaarde vertelt decoderen wat er moet worden weergegeven als een kolomwaarde niet in de gepaarde lijst staat.

We zouden het algoritme zo kunnen zeggen

if (expr ==zoeken1)
return(result1);
elseif (expr ==zoeken2)
return( resultaat2);
…elseif (expr ==searchn)
return(resultn);
else
return(standaard);

Nog meer punten om te onthouden voor Oracle Decode

1)In een DECODE-functie beschouwt Oracle twee nullwaarden als equivalent. Als expr null is, retourneert Oracle het resultaat van de eerste zoekopdracht die ook null is.

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

2) Het maximum aantal componenten in de DECODE-functie, inclusief expr, zoekopdrachten, resultaten en standaard, is 255.

3) Oracle converteert automatisch de waarden voor expressie en vergelijk_waarde naar het datatype van de eerste vergelijk_waarde. Ook het datatype van de return_value wordt geconverteerd naar het datatype van de eerste return_value. Als het eerste resultaat het datatype CHAR heeft of als het eerste resultaat null is, dan converteert Oracle de retourwaarde naar het datatype VARCHAR2

Decodering lezen in Oracle

we kunnen de decodeerinstructie lezen als een if-else if-instructie. Het eerste argument in de decoderingsinstructie zal over het algemeen een kolom zijn waar gegevenstransformatie nodig is. Het argument daarna zal de waarden van het eerste argument ermee vergelijken

Veelgestelde vragen over Oracle sql Decode-verwerking

(1)We hebben gezien dat "expr" wordt gelijkgesteld aan gespecificeerde waarden. Kunnen we ongelijkheidsoperatoren gebruiken zoals> of

Laten we een voorbeeld nemen
SELECT DECODE(salary,<50000, sal + 1000, sal + 500) Final_salary FROM werkn;
ERROR op regel 2
ORA-00936:ontbrekende expressie
Daar kunnen we dus geen gebruik van maken. Hiervoor hebben we een casusverklaring nodig. of we kunnen de functie ondertekenen in decoderen  om het te bereiken
SELECT DECODE(sign(salary-50000), -1,sal + 1000, sal + 500) Final_salary FROM emp;
Kortom, we moeten onze vereiste voor een formule die kan evalueren tot een bepaalde waarde

(2)Hoe vergelijk ik twee kolomwaarden met Oracle-decodering?

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

(3) Wat is het verschil tussen decoderen en CASE

CASE kan werken als een PL/SQL-constructie, maar DECODE wordt alleen gebruikt in SQL-statements.CASE kan worden gebruikt als parameter van een functie/procedure.
CASE verwacht consistentie van datatype, DECODE niet
CASE verwacht datatype consistentie, DECODE niet
DECODE kan alleen werken met scalaire waarden, maar CASE kan werken met logische operators, predikaten en doorzoekbare subquery's.

(4) Heeft Oracle-decodering een limiet

Ja Het maximum aantal componenten in de DECODE-functie, inclusief expr, zoekopdrachten, resultaten en standaard, is 255.

Verwante links
Oracle-documentatie over decoderen
hoe sql-query's te schrijven
Basic Sql-statement
Oracle Case Statement uitgelegd met tips en voorbeelden
SQL-tutorial


  1. Locatie van het relevante tnsnames.ora-bestand bepalen

  2. Scheidingsteken voor duizendtallen in SQL Server 2008 voor een kolom

  3. Hoe een WordPress MySQL-database in de cloud in te stellen

  4. Microsoft Access versus SQL Server