Gestione del valore NULL
copia linkIntroduzione: il valore NULL
Il valore NULL è un valore speciale e viene utilizzato quando si vuole indicare che un determinato campo non ha valore. Tale informazione è diversa da "il campo ha valore uguale a 0" (o uguale al carattere vuoto o uguale ad una stringa vuota). La presenza del valore NULL indica, in genere, che il valore è sconosciuto o non è stato ancora definito. I database gestiscono questa differenza e memorizzano sia l'informazione "il campo non ha valore" che l'informazione "il campo ha un valore". Il meccanismo di funzionamento del valore NULL deve essere considerato quando viene utilizzato in espressioni insieme ad altri valori. Il seguente elenco può fornire qualche spunto:
- NULL <> 0 -> Unknown
- NULL = 0 -> Unknown
- NULL AND TRUE -> Unknown
- NULL AND FALSE -> Unknown
- NULL OR TRUE -> TRUE
- NULL OR FALSE -> Unknown
- NOT (NULL) -> Unknown
- NULL + 1 -> NULL
- NULL + 'a' -> NULL
- NULL * 1 -> NULL
- NULL / 2 -> NULL
La gestione del valore NULL in applicazioni Visual Basic
Nelle applicazioni prodotte con IN:DE compilate con tecnologia Visual Basic, quando una query di tipo Select Into Variables restituisce il valore NULL, IN:DE lo legge convertendolo in un valore di default in base al tipo di dato della variabile. Se, ad esempio, la variabile è intera, IN:DE converte il valore NULL in zero. Tale conversione, però, fa sì che l'informazione "nessun valore" viene persa. Nelle applicazioni VB, comunque, il valore NULL è gestito compliutamente nei pannelli e nelle tabelle in memoria: le conversioni automatiche riguardano solo i valori letti da DB e memorizzati in variabili all'interno di procedure scritte in Visual Code.
La gestione del valore NULL in applicazioni C# e Java
Le applicazioni scritte utilizzando le tecnologie Java e C# gestiscono i valori NULL anche nelle variabili delle procedure scritte in Visual Code. Una variabile, contenuta in una procedura scritta in Visual Code, definita come intera, può contenere anche il valore Null Number (definito nella libreria dei progetti Instant Developer). La gestione dei valori NULL nelle espressioni è diversa da quella dei database, è più naturale:
- NULL <> 0 -> TRUE
- NULL = 0 -> FALSE
- NULL AND TRUE -> FALSE
- NULL AND FALSE -> FALSE
- NULL OR TRUE -> TRUE
- NULL OR FALSE -> FALSE
- NOT (NULL) -> TRUE
- NULL + 1 -> 1
- NULL * 2 -> 0
- NULL +c 'Pippo' -> 'Pippo'
Il porting delle applicazioni da Visual Basic a C#/Java
Quando si effettua il porting automatico dalla tecnologia Visual Basic a quelle Java o C# occorre gestire questa differenza di comportamento. Vediamo il seguente esempio di codice:
se campo Descrizione della tabella Righe può essere NULL e viene fornito alla procedura il codice di una riga con valore NULL nella descrizione, questa procedura esegue l'update quando compilata in VB, ma non se compilata in ambiente Java o C#, poiché NULL non è uguale ad Empty String (vedi riga di codice colorata di giallo). Una possibilità consiste nel modificare la riga di codice evidenziata in:
Procedura corretta
Il parametro ConvertNullToValues
Un'altra possibilità consiste nell'assegnare il valore 'YES' alla costante di compilazione ConvertNullToValues, iintrodotta nella versione 6.7.2850 di Instant Developer. Tale costante ha l'effetto di convertire automaticamente un valore NULL nel corrispondente valore di default quando il valore viene utilizzato in un confronto. Questo vuol dire che se la costante di compilazione vale 'YES' l'espressione
NULL = 0restituisce il valore TRUE a differenza di quanto visto prima, poichè internamente il valore NULL viene convertito in 0 prima di effettuare il confronto. In questo modo le applicazioni C# e Java si comportano, per quel che riguarda la gestione dei valori NULL, come quelle scritte in Visual Basic.
Note
- Per le applicazioni JAVA occorre tener presente che il valore della costante di compilazione ConvertNullToValue viene gestito in maniera "statica" dal framework. Questo vuol dire che se il file IJLIB.JAR viene copiato nella directory Shared\Lib di Tomcat il valore della costante di compilazione DEVE essere uguale per tutte le applicazioni installate sotto Tomcat. Se, invece, si desidera che alcune applicazioni si comportino in maniera diversa dalle altre (per quel che riguarda la gestione dei NULL), occorre copiare il file IJLIB.JAR all'interno della directory WEB-INF\Lib di ogni applicazione installata eliminandolo dalla directory Shared\Lib di Tomcat.
Attenzione, questo articolo è stato dichiarato obsoleto! Ultima modifica: 17/08/2023 / Validità: da 6.6.2750