DECODE |
Décode |
|---|---|
| Oracle Database SQL | Oracle 9i+ |
Syntaxe
| decode(expression,search,result [, search, result][...][,default]) |
Paramètres
| Nom | Description |
|---|---|
| expression | Ce paramètre permet d'indiquer la valeur à comparer |
| search | Ce paramètre permet d'indiquer la valeur étant comparer avec le paramètre «expression». |
| result | Ce paramètre permet d'indiquer la valeur retourné, si le paramètre «expression» est égale au paramètre «search» |
| default | Ce paramètre optionnel permet d'indiquer la valeur par défaut retourné s'il n'y pas de correspondance de trouvé. |
Description
Cette fonction permet d'effectuer une condition de sélection de cas, soit un attribution de résultat en fonction de certaines valeurs d'une expression.
Remarques
- Fonctionnalité principale de DECODE : La fonction DECODE permet d'effectuer une forme simplifiée de branchement conditionnel directement dans une requête SQL. Elle compare une expression donnée à une série de valeurs «search» et retourne le résultat associé au premier match trouvé. Si aucun match n'est trouvé, elle retourne une valeur par défaut. Cette approche évite d'écrire des requêtes SQL plus complexes avec des CASE.
- Syntaxe concise et compacte : DECODE utilise une syntaxe concise où les paires «search-result» suivent directement l'expression, ce qui rend la fonction très pratique pour les cas simples de correspondance multiple. La syntaxe compacte permet d'intégrer facilement la fonction dans des colonnes calculées, filtres, ou clauses WHERE.
- Comparaison basée sur l'égalité : La comparaison dans DECODE est basée uniquement sur l'égalité entre l'expression et la valeur «search». Elle ne supporte pas d'autres types de comparaisons comme les inégalités ou les plages, contrairement à CASE qui peut évaluer des expressions booléennes plus complexes.
- Gestion du paramètre DEFAULT : Le dernier paramètre optionnel «default» dans DECODE spécifie la valeur à retourner si aucun des «search» ne correspond à l'expression. Si ce paramètre est omis, la fonction retourne NULL. Cela permet d'assurer un résultat contrôlé même en cas d'absence de correspondance.
- Support des types NULL : DECODE gère différemment les valeurs NULL : si l'expression est NULL, elle est considérée égale à un «search» NULL. Cette particularité facilite la gestion des données avec valeurs manquantes sans avoir à écrire des tests spécifiques pour NULL, contrairement à d'autres fonctions SQL.
- Différence avec la fonction CASE : Même si DECODE et CASE remplissent des fonctions similaires, CASE est plus flexible car il accepte des conditions booléennes complexes, tandis que DECODE est limité à des comparaisons d'égalité. CASE est également plus lisible et recommandé pour des requêtes complexes, DECODE restant utile pour des usages simples ou historiques.
- Utilisation fréquente dans les rapports : DECODE est souvent utilisé dans la création de rapports et d'agrégations conditionnelles, pour transformer des codes ou des valeurs numériques en libellés textuels compréhensibles. Cela permet d'éviter des jointures supplémentaires sur des tables de correspondance pour afficher des libellés.
- Performance et optimisation : DECODE est très performant pour les bases Oracle, car il est optimisé dans le moteur SQL. Son usage est généralement plus rapide que des jointures complexes ou des sous-requêtes pour des transformations simples de données, ce qui en fait un outil efficace pour des requêtes analytiques rapides.
- Limites en termes de lisibilité : Malgré sa concision, DECODE peut rapidement devenir difficile à lire et à maintenir lorsqu'il y a de nombreuses paires «search-result». Dans ces cas, la fonction CASE est préférable, car elle permet une structure plus claire avec des mots clefs explicites comme WHEN et ELSE.
- Portabilité entre SGBD : DECODE est une fonction spécifique à Oracle et peu répandue dans d'autres systèmes de gestion de base de données. Pour assurer la portabilité du code SQL vers d'autres SGBD (comme PostgreSQL, SQL Server, MySQL), il est souvent recommandé d'utiliser CASE, qui est un standard ANSI SQL.
- Intégration dans des expressions plus complexes : DECODE peut être imbriquée dans d'autres fonctions Oracle, ce qui permet de construire des expressions conditionnelles complexes. Par exemple, elle peut être combinée avec des fonctions d'agrégation, des conversions ou des calculs arithmétiques pour obtenir des résultats personnalisés dans des requêtes.
- Cas d'usage historique et évolution : Historiquement, DECODE a été la principale fonction Oracle pour effectuer des branches conditionnelles avant l'introduction de CASE en Oracle 9i. Aujourd'hui, elle est encore largement utilisée pour des raisons de compatibilité, mais les nouveaux développements favorisent souvent CASE pour sa clarté et sa puissance.
Voir également
Article - Les géants de l'informatique - Oracle
Dernière mise à jour : Lundi, le 11 mai 2015