
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
- Fonction SQL ORACLE – COUNT()
- Fonction SQL ORACLE – MAX()
- Fonction SQL ORACLE – MIN()
- Fonction SQL ORACLE – SUM()
- Fonction SQL ORACLE – AVG()
- Fonction SQL ORACLE – LENGTH()
📌 À lire aussi : La fonction NVL Oracle

Je ne comprends pas la dernière condition « Afrique et Moyen-Orient ». Je ne savais pas que le moyen orient était un continent ?
C’est corrigé maintenant
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 »
Bonjour,
Tout à fait. Merci pour la remarque.
Cordialement,
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 😉
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. 😉
Pourquoi n’y a-t-il pas l’Océanie ? J’habite en Australie et je me sens discriminé et oppressé par cet oubli.