Casa / Social networks / Descrizione Oracle nvl. Dichiarazioni branch nel comando SELECT. Funzioni EXP(n) e LN(n).

Descrizione Oracle nvl. Dichiarazioni branch nel comando SELECT. Funzioni EXP(n) e LN(n).

funzione NVL

La funzione NVL è generalmente la più utilizzata. La funzione riceve due parametri: NVL(espr1, expr2). Se il primo parametro expr1 non è NULL, la funzione restituisce il suo valore. Se il primo parametro è NULL, la funzione restituisce invece il valore del secondo parametro expr2.

Ritenere esempio pratico. Il campo COMM nella tabella EMP può contenere valori NULL. Quando si esegue una query come:

SELEZIONA EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM

DA SCOTT.EMP

il valore NULL verrà sostituito con zero. Si noti che se un valore viene generato utilizzando una funzione, gli viene assegnato un alias. I risultati della query saranno simili a:

EMPNO ENAME COMM NVL_COMM
7369 FABBRO 0
7499 ALLEN 300 300
7521 REPARTO 500 500
7566 JONES 0
7654 MARTIN 1400 1400
7698 BLAKE 0
7782 CLARK 0
7839 RE 0
7844 TURNER 0 0
7900 GIACOMO 0
7902 GUADO 0
7934 MUGNAIO 0

funzione CEIL(n).

La funzione CEIL restituisce l'intero più piccolo maggiore o uguale al numero n passato come parametro. Per esempio:

SELEZIONA CEIL(100) X1, CEIL(-100) X2, CEIL(100.2) X3 , CEIL(-100.2) X4

DA DOPPIO

TRONCO(n[,m])

La funzione TRUNC restituisce il numero n troncato a m decimali. Il parametro m può essere omesso, nel qual caso n viene troncato a un numero intero.

SELEZIONA TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRUNC(100.25678, 2) X4

DA DOPPIO

funzione SEGNO(n).

La funzione SEGNO determina il segno di un numero. Se n è positivo, la funzione restituisce 1. Se negativo, restituisce -1. Se è zero, viene restituito 0. Ad esempio:

SELEZIONA SEGNO(100.22) X1, SEGNO(-100.22) X2, SEGNO(0) X3

DA DOPPIO

Una caratteristica interessante di questa funzione è la capacità di passare m uguale a zero senza una divisione per 0 errore.

Funzione POTENZA(n, m).

La funzione POWER eleva il numero n alla potenza m. Il grado può essere frazionario e negativo, il che espande significativamente le capacità di questa funzione.

SELEZIONA POTENZA(10, 2) X1, POTENZA(100, 1/2) X2,

POTENZA(1000, 1/3) X3, POTENZA(1000, -1/3) X4

DA DOPPIO

X1 X2 X3 X4
100 10 10 0,1

In alcuni casi, può verificarsi un'eccezione quando si chiama questa funzione. Per esempio:

SELEZIONA POTENZA(-100, 1/2) X2

DA DOPPIO

In questo caso, viene effettuato un tentativo di calcolare la radice quadrata di un numero negativo, che risulterà in un errore ORA-01428 "Argomento fuori intervallo".

Funzione SQRT(n)

Questa funzione restituisce la radice quadrata di n. Per esempio:

SELEZIONA SQRT(100) X

DA DOPPIO

Funzioni EXP(n) e LN(n).

La funzione EXP eleva e alla potenza di n e la funzione LN calcola il logaritmo naturale di n (con n deve essere maggiore di zero). Esempio:

SELEZIONA EXP(2) X1, LN(1) X2, LN(EXP(2)) X3

TO_CHAR funzione con numeri

Funzioni per convertire i dati in altri tipi di dati. TO_CHAR(numero) converte un numero in testo. TO_NUMBER(stringa) converte il testo in un numero.

SELECT TO_CHAR (123) FROM DUAL restituirà la stringa 123, SELECT TO_NUMBER (`12345") FROM DUAL restituirà il numero 12345.

Lavoro di laboratorio. Modifica del formato dei numeri di output

Modifiche al formato numerico in Oracle SQL, funzione TO_CHAR per lavorare con valori numerici.

Esercizio:

Scrivere una query che visualizzi informazioni su nome, cognome e stipendio dei dipendenti dalla tabella hr.employees nel formato mostrato nella Figura 1. 3.4-1:

Riso. 3.4 -1

Allo stesso tempo, i dati dovrebbero essere ordinati in modo tale che le righe per i dipendenti con lo stipendio più alto vengano visualizzate per prime.

Nota:

Alcuni valori salariali in Fig. 3.4-1 sono stati modificati in modo che potrebbero non corrispondere ai tuoi valori.

Soluzione:

SELEZIONA nome COME "Nome", cognome Come "Cognome", TO_CHAR(SALARY, "L999999999.99") Come "Stipendio" DA hr.employees ORDINA PER SALARY DESC.

Funzioni TO_NUMBER e TO_DATE

Funzione per convertire la stringa in data TO_DATE(string, format). Possibili valori i formati sono già stati discussi sopra, quindi fornirò alcuni esempi di utilizzo di questa funzione. Esempi:

SELEZIONARE TO_DATE("01/01/2010", `GG.MM.AAAA") DA DUAL restituirà la data `01.01.2010";

SELEZIONARE TO_DATE("01.GEN.2010",`DD.MON.YYYY") DA DUAL restituirà la data `01.01.2009";

SELEZIONARE TO_DATE("15-01-10",`GG-MM-AA") DA DUAL restituirà la data `01/15/2010'.

Una funzione per convertire una stringa in un valore numerico TO_NUMBER (stringa, formato). I valori di formato più comuni sono elencati nella tabella, quindi consideriamo l'uso di questa funzione usando degli esempi. Esempi:

SELEZIONARE TO_NUMBER(`100") DA DUAL restituirà il numero 100 SELECT TO_NUMBER(`0010.01", "9999D99") DA DUAL restituirà il numero 10.01;

SELEZIONARE TO_NUMBER("500.000", "999G999") DA DUAL restituirà il numero 500000.

Elemento RR in formato data

L'elemento formato data e ora RR è simile all'elemento formato data e ora YY, ma offre ulteriore flessibilità per la memorizzazione dei valori di data in altri secoli. L'elemento di formato RR datetime consente di memorizzare le date del 20° secolo nel 21° secolo specificando solo le ultime due cifre dell'anno.

Se le ultime due cifre dell'anno in corso sono comprese tra 00 e 49, l'anno restituito ha le stesse prime due cifre dell'anno in corso.

Se le ultime due cifre dell'anno in corso sono comprese tra 50 e 99, le prime 2 cifre dell'anno restituito sono 1 maggiore delle prime 2 cifre dell'anno in corso.

Se le ultime due cifre dell'anno in corso sono comprese tra 00 e 49, le prime 2 cifre dell'anno restituito sono 1 in meno rispetto alle prime 2 cifre dell'anno in corso.

Se le ultime due cifre dell'anno in corso sono comprese tra 50 e 99, l'anno restituito ha le stesse prime due cifre dell'anno in corso.

funzione NVL

La funzione NVL è generalmente la più utilizzata. La funzione riceve due parametri: NVL(espr1, expr2). Se il primo parametro expr1 non è NULL, la funzione restituisce il suo valore. Se il primo parametro è NULL, la funzione restituisce invece il valore del secondo parametro exp2.

Esempio: selezionare NVL (supplier_city, n/a") dai fornitori:

L'istruzione SQL precedente restituirà n/" se il campo supplier_city contiene valore zero. In caso contrario, restituirà il valore supplier_city.

Un altro esempio di utilizzo della funzione NVL in Oracle/PLSQL è:

selezionare supplier_id, NVL (supplier_desc, supplier_name) dai fornitori.

Questa istruzione SQL verrà restituita Nome del fornitore campo se fornitore_desc contiene un valore nullo. Altrimenti tornerà fornitore_desc.

Ultimo esempio: l'utilizzo della funzione NVL in Oracle/PLSQL è: select NVL(commission, 0) from sales;

Questa istruzione SQL ha restituito il valore 0 se commissione il campo contiene un valore nullo. Altrimenti, ritornerebbe commissioni campo.

Trasformazioni NVL per vari tipi di dati

Per convertire un valore non definito in un valore effettivo, utilizzare la funzione NVL: NVL ( espressione1, espressione2), dove:

espressione1- Il valore originale o calcolato, che può essere nullo.

espressione2- Il valore che viene sostituito dal valore null.

Nota: La funzione NVL può essere utilizzata per convertire qualsiasi tipo di dati, ma il risultato sarà sempre dello stesso tipo di espressione1.

Conversione NVL per vari tipi:

NUMERO-NVL (colonna numerica, 9).

CHAR o VARCHAR2 - NVL (caratteri|colonna,"Non disponibile").

Lavoro di laboratorio. Applicazione della funzione NVL

Funzione NVL per gestire valori nulli in Oracle SQL.

Esercizio:

Scrivere una query che visualizzi informazioni sul nome e cognome dei dipendenti dalla tabella hr.employees., nonché sulla percentuale di commissione (colonna COMMISSION_PCT) per il dipendente. In questo caso, per quei dipendenti per i quali non è definita la provvigione, è necessario visualizzare il valore 0. Il risultato della query dovrebbe essere lo stesso di Fig. 3.5-1.

Riso. 3.5 -1 (valori riportati a partire dalla riga 51)

Soluzione:

Il codice di richiesta corrispondente potrebbe essere simile al seguente:

SELECT first_name AS "First Name", last_name As "Last Name", NVL (COMMISSION_PCT, 0) Come "Commission Rate" FROM hr.employees.

funzione NVL

La funzione NVL è generalmente la più utilizzata. La funzione riceve due parametri: NVL(espr1, expr2). Se il primo parametro expr1 non è NULL, la funzione restituisce il suo valore. Se il primo parametro è NULL, la funzione restituisce invece il valore del secondo parametro expr2.

Consideriamo un esempio pratico. Il campo COMM nella tabella EMP può contenere valori NULL. Quando si esegue una query come:

SELEZIONA EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM

DA SCOTT.EMP

il valore NULL verrà sostituito con zero. Si noti che se un valore viene generato utilizzando una funzione, gli viene assegnato un alias. I risultati della query saranno simili a:

EMPNO ENAME COMM NVL_COMM
7369 FABBRO 0
7499 ALLEN 300 300
7521 REPARTO 500 500
7566 JONES 0
7654 MARTIN 1400 1400
7698 BLAKE 0
7782 CLARK 0
7839 RE 0
7844 TURNER 0 0
7900 GIACOMO 0
7902 GUADO 0
7934 MUGNAIO 0

funzione CEIL(n).

La funzione CEIL restituisce l'intero più piccolo maggiore o uguale al numero n passato come parametro. Per esempio:

SELEZIONA CEIL(100) X1, CEIL(-100) X2, CEIL(100.2) X3 , CEIL(-100.2) X4

DA DOPPIO

TRONCO(n[,m])

La funzione TRUNC restituisce il numero n troncato a m decimali. Il parametro m può essere omesso, nel qual caso n viene troncato a un numero intero.

SELEZIONA TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRUNC(100.25678, 2) X4

DA DOPPIO

funzione SEGNO(n).

La funzione SEGNO determina il segno di un numero. Se n è positivo, la funzione restituisce 1. Se negativo, restituisce -1. Se è zero, viene restituito 0. Ad esempio:

SELEZIONA SEGNO(100.22) X1, SEGNO(-100.22) X2, SEGNO(0) X3

DA DOPPIO

Una caratteristica interessante di questa funzione è la capacità di passare m uguale a zero senza una divisione per 0 errore.

Funzione POTENZA(n, m).

La funzione POWER eleva il numero n alla potenza m. Il grado può essere frazionario e negativo, il che espande significativamente le capacità di questa funzione.

SELEZIONA POTENZA(10, 2) X1, POTENZA(100, 1/2) X2,

POTENZA(1000, 1/3) X3, POTENZA(1000, -1/3) X4

DA DOPPIO

X1 X2 X3 X4
100 10 10 0,1

In alcuni casi, può verificarsi un'eccezione quando si chiama questa funzione. Per esempio:

SELEZIONA POTENZA(-100, 1/2) X2

DA DOPPIO

In questo caso, viene effettuato un tentativo di calcolare la radice quadrata di un numero negativo, che risulterà in un errore ORA-01428 "Argomento fuori intervallo".

Funzione SQRT(n)

Questa funzione restituisce la radice quadrata di n. Per esempio:

SELEZIONA SQRT(100) X

DA DOPPIO

Funzioni EXP(n) e LN(n).

La funzione EXP eleva e alla potenza di n e la funzione LN calcola il logaritmo naturale di n (con n deve essere maggiore di zero). Esempio:

SELEZIONA EXP(2) X1, LN(1) X2, LN(EXP(2)) X3

Abbiamo accennato alle funzioni nidificate un po' prima, ora vediamole un po' più in dettaglio. Esamineremo anche le funzioni per lavorare con il valore NULL e le funzioni che aiutano a implementare l'operazione di branching in una query.

funzioni nidificate

Le funzioni nidificate utilizzano il valore restituito da una funzione come parametro di input per un'altra funzione. Le funzioni restituiscono sempre un solo valore. Pertanto, puoi considerare il risultato di una chiamata di funzione come un valore letterale quando lo usi come parametro per un'altra chiamata di funzione. Le funzioni di riga possono essere nidificate fino a qualsiasi livello di nidificazione. Una singola chiamata di funzione è simile a questa

Funzione1(parametro1, parametro2, …) = risultato

La sostituzione di un parametro di funzione con una chiamata a un'altra funzione può comportare espressioni come

F1(param1.1, F2(param2.1, param2.2, F3(param3.1)), param1.3)

Le funzioni nidificate vengono valutate prima prima che i loro risultati vengano utilizzati come valori di input per altre funzioni. Le funzioni vengono valutate dal livello di annidamento più profondo al più alto da sinistra a destra. L'espressione precedente viene eseguita come segue

  1. Viene valutata la funzione F3(param1) e il valore restituito viene utilizzato come terzo parametro per la funzione 2, chiamiamola param2.3
  2. Quindi viene valutata la funzione F2(param1, param2.2, param2.3) e il valore restituito viene utilizzato come secondo parametro della funzione F1 - param1.2
  3. Infine, viene valutata la funzione F1(param1, param2, param1.3) e il risultato viene restituito al programma chiamante.

Pertanto, la funzione F3 è al terzo livello di annidamento.

Considera una domanda

seleziona next_day(last_day(sysdate)-7, 'mar') da dual;

  1. Ci sono tre funzioni in questa query, dal basso verso l'alto: SYSDATE, LAST_DAY, NEXT_DAY. La richiesta è fatta così
  2. Viene eseguita la funzione SYSDATE annidata. Restituisce l'ora di sistema corrente. Diciamo che la data attuale è il 28 ottobre 2009
  3. Successivamente, viene calcolato il risultato della funzione di secondo livello LAST_DAY. LAST_DATE('28-OCT-2009') restituisce l'ultimo giorno di ottobre 2009, ovvero il 31 ottobre 2009.
  4. Quindi vengono sottratti sette giorni da questa data: si ottiene il 24 ottobre.
  5. Infine, viene valutata la funzione NEXT_DAY('24-OCT-2009', 'tue') e la query restituisce l'ultimo martedì di ottobre, che nel nostro esempio è 27-OCT-2009.

È abbastanza difficile capire e costruire espressioni complesse usando molte chiamate di funzioni nidificate, ma questo arriva con il tempo e la pratica. È possibile suddividere tali espressioni in parti e testarle separatamente. La tabella DUAL è molto utile per testare le query ei risultati delle chiamate di funzione. È possibile testare ed eseguire il debug di piccoli componenti, che vengono quindi combinati in un'unica grande espressione desiderata.

Funzioni di filiale

Le funzioni di diramazione, note anche come IF-THEN-ELSE, vengono utilizzate per determinare il percorso di esecuzione a seconda di alcune circostanze. Le funzioni di ramo restituiscono risultati diversi in base al risultato della valutazione della condizione. Nel gruppo di tali funzioni, ci sono funzioni per lavorare con il valore NULL: NVL, NVL2, NULLIF e COALESCE. E anche le funzioni generali rappresentate dalla funzione DECODE e dall'espressione CASE. La funzione DECODE è una funzione Oracle, mentre l'espressione CASE è nello standard ANSI SQL.

funzione NVL

La funzione NVL controlla il valore di una colonna o di un'espressione di qualsiasi tipo di dati per un valore Null. Se il valore è NULL, restituisce un valore predefinito alternativo non NULL, altrimenti viene restituito il valore originale.

La funzione NVL ha due parametri obbligatori e la sintassi è NVL(original, ifnull) dove original è il valore originale da controllare e ifnull è il risultato restituito dalla funzione se original è NULL. Il tipo di dati dei parametri ifnull e original deve essere compatibile. Cioè, o il tipo di dati deve essere lo stesso o deve essere possibile convertire implicitamente i valori da un tipo all'altro. La funzione NVL restituisce un valore dello stesso tipo di dati del tipo di dati del parametro originale. Considera tre domande

Query 1: seleziona nvl(1234) da dual;

Query 2: seleziona nvl(null, 1234) da dual;

Query 3: select nvl(substr('abc', 4), 'Nessuna sottostringa esistente') da dual;

Poiché la funzione NVL richiede due parametri, la query 1 restituirà un errore ORA-00909: numero di argomenti non valido. La query 2 restituirà 1234 perché NULL viene controllato ed è NULL. La query tre utilizza una funzione SUBSTR annidata che tenta di estrarre il quarto carattere da una stringa di tre caratteri, restituisce NULL e la funzione NVL restituisce la stringa "Nessuna stringa sbus".

La funzione NVL è molto utile quando si lavora con i numeri. Viene utilizzato per convertire i valori NULL in 0 in modo che le operazioni aritmetiche sui numeri non restituiscano NULL.

funzione NVL2

La funzione NVL2 fornisce più funzionalità di NVL, ma gestisce anche NULL. Controlla il valore di una colonna o di un'espressione di qualsiasi tipo per un valore nullo. Se il valore non è NULL, viene restituito il secondo parametro, altrimenti viene restituito il terzo parametro, a differenza della funzione NVL, che in questo caso restituisce il valore originale.

La funzione NVL2 ha tre parametri obbligatori e la sintassi è NVL2(original, ifnotnull, ifnull), dove original è il valore da testare, ifnotnull è il valore da restituire se original non è NULL e ifnull è il valore da restituire se original è NULLO. I tipi di dati dei parametri ifnotnull e ifnull devono essere compatibili e non possono essere di tipo LONG. Il tipo di dati restituito dalla funzione NVL2 è uguale al tipo di dati del parametro ifnotnull. Diamo un'occhiata ad alcuni esempi

Query 1: seleziona nvl2(1234, 1, 'a string') da dual;

Query 2: seleziona nvl2(null, 1234, 5678) da dual;

Query 3: select nvl2(substr('abc', 2), 'Not bc', 'No substring') from dual;

Il parametro ifnotnull nella query 1 è un numero e il parametro ifnull è una stringa. Poiché i tipi di dati sono incompatibili, viene restituito l'errore "ORA-01722: numero non valido". La query due restituisce un parametro ifnull perché l'originale è NULL e il risultato è 5678. La query tre utilizza la funzione SUBSTR che restituisce 'bc' e chiama NVL2('bc','Not bc','No substring') - che restituisce un ifnotnull parametro – 'Non bc'.

funzione NULLIF

La funzione NULLIF verifica due valori per lo stesso. Se sono uguali, viene restituito NULL, altrimenti viene restituito il primo parametro. La funzione NULLIF ha due parametri obbligatori e la sintassi è NULLIF(ifunequal, confronto_elemento). La funzione confronta due parametri e, se sono identici, restituisce NULL, altrimenti il ​​parametro ifunequal. Considera le domande

Query 1: seleziona nullif(1234, 1234) da dual;

La query uno restituisce NULL perché i parametri sono identici. Le stringhe nella query 2 non vengono convertite in una data, ma vengono confrontate come stringhe. Poiché le stringhe hanno lunghezze diverse, viene restituito il parametro ifunequal 24-JUL-2009.

Nella Figura 10-4, la funzione NULLIF è nidificata all'interno della funzione NVL2. La funzione NULLIF a sua volta usa le funzioni SUBSTR e UPPER come parte dell'espressione nel parametro ifunequal. La colonna EMAIL viene confrontata con questa espressione, che restituisce la prima lettera del nome concatenata con il cognome per i dipendenti il ​​cui nome è lungo 4 caratteri. Quando questi valori sono uguali, NULLIF restituirà NULL, altrimenti restituirà il valore del parametro ifunequal. Questi valori vengono utilizzati come parametro per la funzione NVL2. NVL2, a sua volta, restituisce una descrizione della corrispondenza o meno degli elementi confrontati.

Figura 10-4 - Utilizzo della funzione NULLIF

Funzione COALESCE

La funzione COALESCE restituisce il primo valore non NULL dall'elenco dei parametri. Se tutti i parametri sono NULL, viene restituito NULL. La funzione COALESCE ha due parametri obbligatori e un numero qualsiasi di parametri facoltativi e la sintassi è COALESCE(espr1, expr2, ..., esprn) dove il risultato è expr1 se il valore di expr 1 non è NULL, altrimenti il ​​risultato è expr2 se non è NULL e così via. COALESCE è uguale nel significato alle funzioni NVL nidificate

COALESCE(espr1, espr2) = NVL(espr1, expr2)

COALESCE(espr1, espr2, espr3) = NVL(espr1,NVL(espr2, expr3))

Il tipo di dati del valore restituito se viene trovato un valore non NULL è uguale al tipo di dati del primo valore non NULL. Per evitare l'errore "ORA-00932: tipi di dati incoerenti", tutti i parametri non NULL devono essere compatibili con il primo parametro non NULL. Considera tre esempi

Query 1: seleziona coalesce(null, null, null, 'a string') from dual;

Query 2: seleziona coalesce(null, null, null) from dual;

Query 3: select coalesce(substr('abc', 4), 'Not bc', 'No substring') from dual;

La query 1 restituisce il quarto parametro: una stringa, poiché è il primo parametro non NULL. La query due restituisce NULL perché tutti i parametri sono NULL. La query 3 valuta il primo parametro, ottiene NULL e restituisce il secondo parametro perché è il primo parametro non NULL.

I parametri della funzione NVL2 possono creare confusione se si ha già familiarità con la funzione NVL. NVL(original, ifnull) restituisce original se il valore non è NULL, altrimenti ifnull. NVL2(original, ifnotnull, ifnull) restituisce ifnotnull se original non è null altrimenti ifnull. La confusione deriva dal fatto che il secondo parametro della funzione NVL è ifnull, mentre NVL2 ha ifnotnull. Quindi non fare affidamento sulla posizione del parametro nella funzione.

Funzione DECO

La funzione DECODE implementa la logica if-then-else controllando l'uguaglianza dei primi due parametri e restituendo il terzo valore se sono uguali, o un valore diverso in caso contrario. La funzione DECODE ha tre parametri obbligatori e la sintassi è DECODE(espr1, comp1, iftrue1, , ). Questi parametri vengono utilizzati come mostrato nel seguente esempio di pseudocodice.

IF expr1=comp1 quindi restituisce iftrue1

Altrimenti se espr1=comp2 restituisce iftrue2

Altrimenti se exprN=compN restituisce iftrueN

Altrimenti restituisce NULL|iffalse;

Innanzitutto, espr1 viene confrontato con comp1. Se sono uguali, viene restituito iftrue1. Se espr1 non è uguale a comp1, ciò che accade dopo dipende dal fatto che i parametri comp2 e iftrue2 siano specificati. Se dato, il valore di espr1 viene confrontato con comp2. Se i valori sono uguali, viene restituito iftrue2. In caso contrario, se sono presenti compN, vengono confrontate le coppie di parametri iftrueN, expr1 e compN e, se true, se uguale viene restituito iftrueN. Se non è stata trovata alcuna corrispondenza in nessun set di parametri, viene restituito iffalse se è stato specificato questo parametro o NULL.

Tutti i parametri nella funzione DECODE possono essere espressioni. Il tipo del valore restituito è uguale al tipo del primo validatore: il parametro comp 1. Espressione espr 1 converte implicitamente nel tipo di dati del parametro comp1. Tutti gli altri Opzioni disponibili comp 1 … compN vengono anche convertiti in modo implicito nel tipo comp 1. DECODE tratta un valore NULL come uguale a un altro valore NULL, ad es. se expr1 è NULL e comp3 è NULL e comp2 non è NULL, viene restituito iftrue3. Diamo un'occhiata ad alcuni esempi

Query 1: seleziona decode(1234, 123, '123 è una corrispondenza') da dual;

Query 2: seleziona decodifica(1234, 123, '123 corrisponde a', 'Nessuna corrispondenza') da dual;

Query 3: select decode('search', 'comp1', 'true1', 'comp2', 'true2', 'search', 'true3', substr('2search', 2, 6), 'true4', ' false') da duale;

La query uno confronta i valori 1234 e 123. Poiché non sono uguali, iftrue1 viene ignorato e poiché iffalse non è definito, viene restituito NULL. La query due è identica alla query 1 tranne per il fatto che è definito il valore iffalse. Poiché 1234 non è uguale a 123, viene restituito iffalse - 'Nessuna corrispondenza'. La query tre controlla i valori dei parametri rispetto al valore di ricerca. I parametri comp1 e comp2 non sono uguali a 'search', quindi i risultati di iftrue1 e iftrue2 vengono saltati. Viene trovata una corrispondenza nella terza operazione di confronto dell'elemento comp3 (parametro posizione 6) e il valore restituito di iftrue3 (parametro 7) è 'true3'. Poiché viene trovata una corrispondenza, non vengono più effettuati calcoli. Cioè, nonostante il valore di comp4 (parametro 8) corrisponda anche a expr1, questa espressione non viene mai valutata perché la corrispondenza è stata trovata nel confronto precedente.

Espressione CASE

Tutti i linguaggi di programmazione di terza e quarta generazione implementano il costrutto case. Come la funzione DECODE, l'espressione CASE consente di implementare la logica if-then-else. Sono disponibili due opzioni per l'utilizzo dell'espressione CASE. Una semplice istruzione CASE imposta l'elemento sorgente da confrontare una volta, quindi elenca tutte le condizioni di test necessarie. CASE complesso (ricercato) valuta entrambe le istruzioni per ciascuna condizione.

L'espressione CASE ha tre parametri obbligatori. La sintassi di un'espressione dipende dal tipo. Per una semplice espressione CASE è simile a questa

CASE espr._ricerca

QUANDO confronto_espr1 ALLORA iftrue1

}