DECODE Oracle : syntaxe, exemples et DECODE vs CASE

Illustration du tutoriel SQL Oracle : Fonction SQL ORACLE – DECODE()

La fonction DECODE est l’une des fonctions ORACLE les plus utilisées.
La fonction DECODE est équivalente à la commande CASE (JAVA, Shell UNIX etc…). Cette fonction permet de faire des tester comme suit:

si X = C1, alors
retourner R1
sinon si X = C2, alors
retourner R2
sinon si X = C3, alors
retourner R3

sinon
retourner D

La syntaxe de DECODE est:

DECODE(X, C1, R1, C2, R2, C3, R3, ..., D)

L’argument D (valeur du dernier sinon), n’est pas obligatoire. Au cas où cet argument n’est pas mentionné, la valeur du dernier sinon est NULL.
Passons aux exemples. Dans la table COUNTRIES (schéma HR), nous voulons afficher le nom du pays et le nom de son continent selon le code REGION_ID:

SELECT
COUNTRY_NAME PAYS,
DECODE(REGION_ID,
1, 'Europe',
2, 'Amérique',
3, 'Asie',
4, 'Afrique') CONTINENT
FROM COUNTRIES;

PAYS                            CONTINENT 
------------------------------- ---------------------- 
Argentina                       Amérique
Australia                       Asie
Belgium                         Europe
Brazil                          Amérique
Canada                          Amérique
Switzerland                     Europe
China                           Asie
Germany                         Europe
Denmark                         Europe
Egypt                           Afrique
France                          Europe
India                           Asie
Italy                           Europe
Japan                           Asie
Kuwait                          Asie
Malaysia                        Asie
Mexico                          Amérique
Nigeria                         Afrique
Netherlands                     Europe
Singapore                       Asie
United Kingdom                  Europe
United States of America        Amérique
Zambia                          Afrique
Zimbabwe                        Afrique

Questions fréquentes

Comment fonctionne DECODE en Oracle ?

DECODE compare une expression à des valeurs successives : DECODE(statut, 'A', 'Actif', 'I', 'Inactif', 'Inconnu'). C’est un IF/THEN/ELSE compact, propre à Oracle.

Faut-il utiliser DECODE ou CASE ?

Préférez CASE : il est standard SQL (portable), plus lisible, gère les comparaisons complexes (>, <, BETWEEN, IS NULL) et les conditions multiples. DECODE reste utile pour des correspondances simples valeur→valeur.

DECODE gère-t-il les valeurs NULL ?

Oui, et c’est une particularité : dans DECODE, NULL = NULL est considéré vrai, alors qu’en SQL standard NULL n’est jamais égal à NULL. DECODE(col, NULL, 'vide', 'rempli') fonctionne donc.

Sur le même thème

📌 À lire aussi : La fonction NVL Oracle

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

7 commentaires

  1. Je ne comprends pas la dernière condition « Afrique et Moyen-Orient ». Je ne savais pas que le moyen orient était un continent ?

  2. faut changer le decode aussi sinon c’est faux .. on peut pas avoir juste « Afrique » avec le decode actuel qui indique « Afrique et Moyen-Orient »

  3. Bonjour, une petite présentation de la table avec les valeurs de REGION_ID pourrait être appréciable pour la compréhension des plus néophytes 😉

  4. Bonjour, merci pour les explications.
    Une petite présentation de la table avec les valeurs de REGION_ID pourrait être appréciable pour les plus néophytes, histoire de bien comprendre la conception du champ CONTINENT. 😉

  5. Pourquoi n’y a-t-il pas l’Océanie ? J’habite en Australie et je me sens discriminé et oppressé par cet oubli.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité