Fonction SQL ORACLE – DECODE()
La fonction DECODE est l’une des fonctions ORACLE les plus utilisés.
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
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.