Questo sito utilizza i cookie per personalizzare i contenuti e gli annunci (Google AdSense), fornire le funzioni dei social media (condivisione degli articoli) e analizzare il traffico (Google Analytics). Inoltre fornisce informazioni sul modo in cui utilizzi il sito alle agenzie pubblicitarie, agli istituti che eseguono analisi dei dati web e ai social media miei partner (Google). Il proseguimento nella navigazione implica un tacito assenso all'utilizzo dei cookies. Se non sei d'accordo sull'utilizzo, ti invito ad allontanarti da questo sito. Visualizza i dettagli.

Venerdì 9 Dicembre 2016

Valutazione attuale: 5 / 5

Stella attivaStella attivaStella attivaStella attivaStella attiva
 

New database.pngOggi mi è capitato di dover estrarre dei dati dal gestioanle aziendale da una tabella con all'interno un indice delle stagionalità dell'articolo. Non avendo una lista di stagioni relative all'indice ho dovuto capire come usare una selec condizionale, ovvero una select che imposta un valore al campo qualora legga un determinato valore da un altro, un po come le istruzioni IF, THEN ed ELSE nei linguaggi di programmazione.

 

Vediamo come usare la funzione DECODE per eseguire una select condizionale.

 

 

 

 

Valido per le versioni Oracle:
Oracle 9i, Oracle 10g, Oracle 11g

 

La sintassi per la funzione DECODE è:

decode( espressione , condizione , risultato [, condizione , risultato]... [, default] )

dove:

espressione è il valore da controllare.

condizione è il valore con cui comparare l'espressione.

risultato è il valore da restituire qualora la condizione si verifichi.

default è un campo opzionale è può essere omesso. Se nessuna condizione è  soddisfatta allora la funzione restituisce il valoire di default.



Proviamo ad usare la funzione DECODE in un caso specifico:

Nell'anagrafica articoli ho una voce STAGINALITA'. Tale voce è impostata con la prima lettera di ogni stagione oppure 1 se l'articolo è per la stagione Autunno/Inverno, 2 se la stagione è Primavera/Estate o null se la stagionalità è continuativa, come ad esempio nel caso della biancheria.

Nel nostro caso la query sarà:

SELECT

codice_articolo AS articolo,
decode(

codice_stagione,

'P',    'Primavera',
'E',    'Estate',
'A',    'Autunno',
'I',    'Inverno',
'1',    'Autunno/Inverno',
'2',    'Primavera/Estate',
'Continuativo'

) stagionalità


FROM anagrafica_articoli;

 



Che tradotto con le istruzioni IF-THEN-ELSE è:



IF codice_stagione = "P" THEN
stagionalità := 'Primavera';

ELSIF
codice_stagione = "E" THEN
stagionalità := 'Estate';

ELSIF
codice_stagione = "A" THEN
stagionalità := 'Autunno';

ELSIF codice_stagione = "I" THEN
stagionalità := 'Inverno';

ELSIF codice_stagione = "1" THEN
stagionalità := 'Autunno/Inverno';

ELSIF codice_stagione = "2" THEN
stagionalità := 'Primavera/Estate';


ELSE
stagionalità := 'Continuativo';

END IF;




La funzione DECODE controllerà il valore di ogni indice stagione, uno ad uno.