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

Come usare Decodifica in Oracle

Introduzione alla decodifica di Oracle sql

In questa sezione, discuteremo dell'elaborazione della decodifica di Oracle, che è un aspetto molto importante dell'istruzione SQL di Oracle

Oracolo decode è il metodo nel database Oracle per trasformare i valori dei dati da un valore a un altro che è meglio comprendere. Oracle Decode trasforma i valori dei dati al momento del recupero.

È un tipo di Se allora altro per il trattamento

Il blocco di codice per Oracle sql Decode è sotto

decodifica(nome dell'espressione o della colonna, corrispondenza, risultato [,match, risultato]…[,default] )

Ecco il significato dei termini nel codice precedente
a) espressione o colonna è il valore da confrontare
b) corrispondenza è il valore che viene confrontato con l'espressione
c) risultato è il valore restituito, se l'espressione è uguale a corrispondenza
d) il valore predefinito è facoltativo. Se non vengono trovate corrispondenze, la decodifica tornerà predefinita. Se default viene omesso, l'istruzione di decodifica restituirà NULL (nessuna corrispondenza trovata).

Esempio

seleziona
decodifica (
Phase Code,
'P','Pending',
'C','Completed',
'T',' Terminato',
'S','Standby',
'SCONOSCIUTO'
)
da
FND_REQUESTS;

Ecco l'algoritmo per capirlo meglio

1) Oracle recupera il valore della colonna del codice fase
2) se codice fase ='P' quindi in sospeso
3) se codice fase ='C' quindi Completato
4) se codice fase ='T' quindi Terminato
5) se Codice Fase ='S'  quindi Standby
6) Se il codice Fase non è nessuno dei precedenti, la decodifica restituisce Sconosciuto
7) Se il valore predefinito non è presente darà null

Si noti che la decodifica Oracle inizia specificando il nome della colonna o l'espressione, seguito da un set di coppie di valori di trasformazione corrispondenti. Alla fine dell'istruzione di decodifica troviamo un valore di default. Il valore predefinito indica alla decodifica cosa visualizzare se i valori di una colonna non sono nell'elenco accoppiato.

Potremmo dire che l'algoritmo in questo modo

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

Alcuni altri punti da ricordare per Oracle Decode

1) In una funzione DECODE, Oracle considera equivalenti due valori null. Se expr è nullo, Oracle restituisce anche il risultato della prima ricerca nullo.

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

2) Il numero massimo di componenti nella funzione DECODE, inclusi expr, ricerche, risultati e default, è 255.

3) Oracle converte automaticamente i valori per expression e compare_value nel tipo di dati del primo compare_value. Anche il tipo di dati del valore_ritorno viene convertito nel tipo di dati del primo valore_ritorno. Se il primo risultato ha il tipo di dati CHAR o se il primo risultato è null, Oracle converte il valore restituito nel tipo di dati VARCHAR2

Come leggere la decodifica in Oracle

possiamo leggere l'istruzione di decodifica come istruzione if-else if. Il primo argomento nell'istruzione di decodifica sarà generalmente una colonna in cui è necessaria la trasformazione dei dati. L'argomento successivo confronterà i valori del primo argomento con esso

Domande frequenti sull'elaborazione di Oracle sql Decode

(1)Abbiamo visto che "expr" essendo equiparato a valori specificati, possiamo usare operatori di disuguaglianza come> o

Facciamo un esempio
SELECT DECODE(salary,<50000, sal + 1000, sal + 500) Final_salary FROM emp;
ERROR at line 2
ORA-00936:missing expression
Quindi non possiamo usarlo. Abbiamo bisogno di usare un'istruzione case per farlo. oppure possiamo firmare la funzione in decodifica  per ottenerla
SELECT DECODE(sign(salary- 50000), -1,sal + 1000, sal + 500) Final_salary FROM emp;
Fondamentalmente, dobbiamo convertire il nostro requisito per una formula che possa restituire un valore

(2)Come confrontare i valori di due colonne usando la decodifica di Oracle?

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

(3) Qual è la differenza tra Decode e CASE

CASE può funzionare come un costrutto PL/SQL ma DECODE viene utilizzato solo nelle istruzioni SQL. CASE può essere utilizzato come parametro di una funzione/procedura.
CASE prevede la coerenza del tipo di dati, DECODE no
CASE prevede il tipo di dati coerenza, DECODE no
DECODE può funzionare solo con valori scalari, ma CASE può funzionare con operatori logici, predicati e sottoquery ricercabili.

(4) La decodifica di Oracle ha un limite

Sì Il numero massimo di componenti nella funzione DECODE, inclusi expr, ricerche, risultati e default, è 255.

Link correlati
Documentazione Oracle sulla decodifica
Come scrivere query sql
Istruzione SQL di base
Spiegazione dell'istruzione Oracle Case con suggerimenti ed esempi
Tutorial SQL