Oracle Database/Utilisation de fonctions/fonction DECODE

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche


La fonction DECODE correspond à une fonction (IF, EQUALS, THEN, ELSE), voire (IF,THEN,ELSIF,ELSIF,...,ELSIF,ELSE) dans son utilisation avec plus de quatre arguments.

Plusieurs utilisations sont possibles, selon le nombre de cas de figure prévues :

Nombre de tests Nombre d'arguments Syntaxe
1 4 DECODE (Expression, Egalité, BlocTrue, BlocFalse)
2 6 DECODE (Expression, Egalité1, BlocTrue1, Egalité2, BlocTrue2, BlocFalse)
3 8 DECODE (Expression, Egalité1, BlocTrue1, Egalité2, BlocTrue2, Egalité3, BlocTrue3, BlocFalse)
etc... N 4+2*(N-1) DECODE (Expression, Egalité1, BlocTrue1, ...................................., EgalitéN, BlocTrueN, BlocFalse)


Exemple d'utilisation[modifier | modifier le wikicode]

La requête suivante illustre l'utilisation de cette fonction.


--Exemple d'utilisation de la fonction DECODE

WITH Mesure AS (
   SELECT 1 MesureID,4 Capteur1,3 Capteur2,5 Capteur3,4 Capteur4,4 Capteur5 from dual union --Pour la 1ere ligne, on précise les noms des colonnes
   SELECT 2 , 4 , 1 , 5 , 51, 5 FROM DUAL UNION --Pour les lignes, on ne le refait pas
   SELECT 3 , 4 , 3 , 5 , 9 , 4 FROM DUAL UNION
   SELECT 4 , 3 , 91, 5 , 5 , 4 FROM DUAL UNION
   SELECT 5 , 4 , 1 , 5 , 5 , 5 FROM DUAL
   )
--SELECT * FROM Mesure

SELECT
MesureID
,DECODE(Capteur1, 1, 'Un', 2, 'Deux', 3, 'Trois', 4, 'Quatre', 5, 'Cinq', 'Plus que cinq') "Capteur du Jardin"
,DECODE(SIGN(Capteur2-9), 1, 'NOTABLE', 'RAS') "Capteur du parking" -- DECODE( SIGN(A-B), 1, "A>B", "A>=B") pratique pour un choix binaire
,DECODE(Capteur3, 1, 'Un', 2, 'Deux', 3, 'Trois', 4, 'Quatre', 5, 'Cinq', 'Plus que cinq') "Capteur de la Cuisine"
,DECODE(TRUNC(Capteur4/5), 0, 'Plage faible', 1, 'Plage moyenne', 'Plage forte') "Capteur du toit" -- DECODE( TRUNC(val/PAS), 0, "val entre 0 et PAS", 1, "val entre PAS et 2*PAS", "val>2*PAS") pour un choix à N plages
,DECODE(Capteur5, 1, 'Un', 2, 'Deux', 3, 'Trois', 4, 'Quatre', 5, 'Cinq', 'Plus que cinq') "Capteur du Grenier"
FROM Mesure
;

-- Résultat en décommentant "SELECT * FROM Mesure"

MESUREID CAPTEUR1 CAPTEUR2 CAPTEUR3 CAPTEUR4 CAPTEUR5
---------------------- ---------------------- ---------------------- ---------------------- ---------------------- ----------------------
1 4 3 5 4 4
2 4 1 5 51 5
3 4 3 5 9 4
4 3 91 5 5 4
5 4 1 5 5 5

-- Résultat sans rien décommenter

MESUREID Capteur du Jardin Capteur du parking Capteur de la Cuisine Capteur du toit Capteur du Grenier
---------------------- ----------------- ------------------ --------------------- --------------- ------------------
1 Quatre RAS Cinq Plage faible Quatre
2 Quatre RAS Cinq Plage forte Cinq
3 Quatre RAS Cinq Plage moyenne Quatre
4 Trois NOTABLE Cinq Plage moyenne Quatre
5 Quatre RAS Cinq Plage moyenne Cinq