NANVL |
Valeur pas un nombre |
|---|---|
| Oracle Database SQL | Oracle 10g Release 1 (version 10.1) ou supérieure |
Syntaxe
| NANVL(valeur,replace_with) |
Paramètres
| Nom | Description |
|---|---|
| valeur | Ce paramètre permet d'indiquer la valeur «BINARY_FLOAT» ou «BINARY_NUMBER» à tester pour un test «Pas un nombre» |
| replace_with | Ce paramètre permet d'indiquer la valeur à retourner si la valeur n'est «Pas un nombre». |
Description
Cette fonction permet de remplacer par une valeur réelle quand une expression n'étant pas un nombre est rencontré.
Remarques
- La fonction NANVL est spécialisée pour les types numériques flottants : Elle ne s'applique qu'aux types BINARY_FLOAT et BINARY_DOUBLE, ce qui signifie qu'elle ne peut pas être utilisée avec des types numériques traditionnels comme NUMBER. Cette restriction est essentielle à comprendre pour éviter des erreurs de compatibilité dans les requêtes SQL.
- NANVL fonctionne comme NVL, mais pour NaN uniquement : Alors que la fonction NVL teste les valeurs nulles (NULL), NANVL teste spécifiquement si une expression est égale à NaN (Not a Number), ce qui représente une erreur ou une absence de valeur valide dans des calculs flottants. Cela permet une gestion plus fine des cas exceptionnels liés aux flottants.
- NaN est un concept propre aux calculs en virgule flottante : Contrairement à NULL, NaN signifie que la valeur numérique est non définie, souvent en raison d'une division par zéro ou d'une opération invalide. NANVL permet donc de détecter et de corriger les valeurs corrompues dans les résultats numériques.
- L'utilisation de NANVL améliore la robustesse des calculs scientifiques : Dans les traitements statistiques, d'ingénierie ou d'analyse avancée, les calculs produisant des NaN sont fréquents. NANVL permet de remplacer ces valeurs indésirables par des valeurs par défaut, garantissant une continuité dans les traitements numériques.
- Elle permet de personnaliser la valeur de remplacement : L'argument replace_with offre une grande flexibilité : il peut être une constante, une variable ou une expression. Cela permet d'adapter dynamiquement le comportement de la requête selon le contexte métier ou analytique.
- NANVL n'affecte pas les valeurs valides : Si la valeur de départ n'est pas NaN, la fonction retourne la valeur inchangée. Cela garantit que les valeurs correctes ne sont jamais modifiées, ce qui en fait une fonction non intrusive pour les données valides.
- Utile dans les fonctions d'agrégation avec filtrage : Lorsque des calculs de moyennes, sommes ou écarts-types sont effectués, NANVL peut servir à nettoyer les données sources. Elle peut, par exemple, transformer les NaN en zéro ou en une autre valeur pour permettre des agrégations fiables.
- NANVL évite les erreurs d'affichage ou de formatage : Dans certains clients SQL ou outils de reporting, les NaN peuvent poser problème à l'affichage ou provoquer des erreurs. Les remplacer via NANVL permet d'avoir des rapports clairs et sans anomalies.
- Elle peut être combinée avec NVL pour un filtrage complet : Dans des cas complexes, une valeur peut être soit NULL soit NaN. Une combinaison NVL(NANVL(...), default) permet alors de couvrir les deux cas et d'assurer qu'une valeur concrète est toujours retournée.
- Requiert une attention particulière lors des conversions de types : Il est essentiel que l'argument soit explicitement du type BINARY_FLOAT ou BINARY_DOUBLE. Sinon, Oracle renvoie une erreur de type. Par exemple, utiliser CAST(... AS BINARY_FLOAT) peut être nécessaire pour éviter une erreur de type.
- NANVL facilite la correction automatique des anomalies numériques : Dans des pipelines de données où les erreurs numériques sont fréquentes, cette fonction peut servir d'étape de correction automatique pour éviter que les NaN ne propagent des résultats incohérents.
- Non applicable aux types de données non numériques : NANVL ne peut pas être utilisé sur des types comme VARCHAR2, DATE, ou même NUMBER. C'est une fonction très ciblée qui répond à des cas spécifiques de traitement numérique flottant. Cette limitation permet néanmoins une optimisation accrue de son traitement par Oracle.
Voir également
Article - Les géants de l'informatique - Oracle
Dernière mise à jour : Lundi, le 11 mai 2015