In Oracle, la funzione DECODE ci consente di aggiungere la logica procedurale if-then-else alla query. In questo blog, cercheremo di ottenere una comprensione completa della funzione DECODE in SQL. Impareremo i vari modi di utilizzare DECODE, la sua sintassi e la comprenderemo con esempi. Resta con noi fino alla fine del blog.
Gli argomenti che verranno trattati sono:
- Cos'è la funzione DECODE in SQL?
- La sintassi per la funzione DECODE
- Esempi di funzione DECODE
Iniziamo uno per uno.
Cos'è la funzione DECODE in SQL?
In Oracle, la funzione DECODE ci consente di aggiungere la logica procedurale if-then-else alla query. DECODE confronta l'espressione con ogni valore di ricerca uno per uno. Se expression è uguale a una ricerca, il risultato corrispondente viene restituito da Oracle Database. Se non viene trovata una corrispondenza, viene restituito il valore predefinito. Se default viene omesso, Oracle restituisce null.
Il tipo di argomenti può essere:
- Tipi numerici (NUMBER, BINARY_FLOAT o BINARY_DOUBLE)
Se la prima coppia di risultati di ricerca è numerica, Oracle confronta tutte le espressioni di risultati di ricerca e la prima expr per trovare l'argomento con la precedenza numerica più alta, converte gli argomenti rimanenti in modo implicito in quel tipo di dati e restituisce quel particolare tipo di dati.
- Tipi di caratteri
Se expr e search sono dati di caratteri, Oracle li confronta utilizzando la semantica di confronto non riempita. expr, search e il risultato può essere uno qualsiasi dei tipi di dati CHAR, VARCHAR2, NCHAR o NVARCHAR2. La stringa restituita è di tipo dati VARCHAR2 ed è nello stesso set di caratteri del primo parametro di risultato.
Oracle Database utilizza la valutazione del cortocircuito. Valuta i valori di ricerca solo prima di confrontarli con l'espressione anziché valutare tutti i valori di ricerca. Se una ricerca precedente è uguale a expression, la valutazione viene terminata.
Oracle converte i valori expr e search nel tipo di dati del primo valore di ricerca prima del confronto. E converte il valore restituito nello stesso tipo di dati del primo risultato.
Esempio: 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.
Due null sono considerati equivalenti da Oracle. Se expr è null, Oracle restituisce NULL che è il risultato della prima ricerca.
Il numero massimo di componenti che possono essere contenuti nella funzione DECODIFICA è 255. Ciò include l'espressione, la ricerca e gli argomenti dei risultati.
La funzione DECODE può essere utilizzata nelle seguenti versioni di Oracle o PLSQL:
Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i
Un esempio di base:
Nell'esempio seguente, la funzione Oracle DECODE() confronta il primo argomento con il secondo argomento. Poiché sono uguali, la funzione restituisce il secondo argomento che è la stringa 'Uno'.
SELECT DECODE(1, 1, 'One') FROM dual;
La sintassi per la funzione DECODE è:
DECODE(espressione , ricerca , risultato [, ricerca , risultato]… [, default(opzionale)])
Il valore che deve essere confrontato. Viene automaticamente convertito nel tipo di dati del primo valore di ricerca prima del confronto.
cerca
Il valore che viene confrontato con l'espressione.
risultato
Il valore restituito, se expression=search.
predefinito
Se non ci sono corrispondenze, la funzione DECODE restituirà default e se default viene omesso, la funzione restituirà NULL.
Esempi di funzione DECODE
- La funzione DECODE può essere utilizzata in Oracle/PLSQL come segue
SELECT bank_name, DECODE(bank_id, 001, 'SBI', 002, 'ICICI', 003, ‘Dena', 'Gateway') result FROM banks;
Istruzione IF-THEN-ELSE equivalente per l'istruzione DECODE() precedente:
IF bank_id = 001 THEN result := 'SBI'; ELSIF bank_id = 002 THEN result := 'ICICI'; ELSIF bank_id = 003 THEN result := 'Dena'; ELSE result := 'Gateway'; END IF;
La funzione DECODE confronterà ogni valore bank_id, uno per uno.
- Funzione DECODE per confrontare due date (data1 e data2), dove, se data1> data2, la funzione DECODE deve restituire data2. In caso contrario, la funzione DECODE dovrebbe restituire date1
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)
La formula seguente è uguale a 0, se data1 è maggiore di data2:
(date1 - date2) - ABS(date1 - date2)
L'esempio di data sopra illustrato può anche essere modificato come segue:
DECODE(SIGN(date1-date2), 1, date2, date1)
- Dichiarazione DECODE che restituirà quanto segue:
Se ore_di_lavoro <1, restituisci 0,04
Se ore_di_lavoro>=1 e <5, restituisce 0,04
Se ore_di_lavoro> 5, restituisci 0,06
Qui devi creare una formula che restituirà un unico numero per ciascuno dei tuoi intervalli.
SELECT emp_name, DECODE(TRUNC (( hours_of_work + 3) / 4), 0, 0.04, 1, 0.04, 0.06) as perc_value FROM employees;
Si tratta della funzione DECODE, a questo punto devi avere un'idea chiara di come funziona e di quanto sia utile questa funzione. Ora, prova a usarli ogni volta che è richiesta una logica IF-ELSE mentre lavori su SQL. Spero che l'articolo ti abbia aiutato con i concetti della dichiarazione DECODE.
Se desideri saperne di più su MySQL e conoscere questo database relazionale open source, dai un'occhiata al nostro Formazione sulla certificazione DBA MySQL che viene fornito con una formazione dal vivo con istruttore e un'esperienza di progetto nella vita reale. Questa formazione ti aiuterà a comprendere in modo approfondito MySQL e a raggiungere la padronanza dell'argomento.
Hai una domanda per noi? Si prega di menzionarlo nella sezione commenti di ”DECODE in SQL” e ti ricontatterò.