Oracle Database/Utilisation de fonctions/fonction DECODE
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
modifierLa 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 1ère ligne, on précise les noms des colonnes
SELECT 2 , 4 , 1 , 5 , 51, 5 FROM DUAL UNION --Pour les lignes suivantes, 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"
modifierMESUREID | 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
modifierMESUREID | 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 |