Table des matières

Search

  1. Préface
  2. Le langage de transformation
  3. Constantes
  4. Opérateurs
  5. Variables
  6. Dates
  7. Fonctions

Référence du langage de transformation

Référence du langage de transformation

IIF

IIF

Renvoie l'une des deux valeurs spécifiées, en fonction des résultats d'une condition.

Syntaxe

IIF(
condition
,
value1
[,
value2
] )
Le tableau suivant décrit les arguments de cette commande:
Argument
Obligatoire/
Facultatif
Description
condition
Obligatoire
Condition que vous souhaitez évaluer. Vous pouvez saisir une expression de transformation valide qui renvoie TRUE ou FALSE.
value1
Obligatoire
Tout type de données excepté Binaire. Valeur que vous voulez renvoyer si la condition est TRUE. La valeur de retour est toujours le type de données spécifié par cet argument. Vous pouvez saisir une expression de transformation valide, y compris une autre expression IIF.
value2
Facultatif
Tout type de données excepté Binaire. Valeur que vous voulez renvoyer si la condition est FALSE. Vous pouvez saisir une expression de transformation valide, y compris une autre expression IIF.
Contrairement aux fonctions conditionnelles de certains systèmes, la condition FALSE (
value2
) dans la fonction IIF n'est pas requise. Si vous omettez
value2
, la fonction renvoie les éléments suivants lorsque la condition est FALSE :
  • 0 si
    value1
    est un type de données numérique.
  • Chaîne vide si
    value1
    est un type de données de chaîne.
  • NULL si
    value1
    est un type de données Date/Heure.
Par exemple, l'expression suivante n'inclut pas de condition FALSE et
value1
est un type de données de chaîne de sorte que le
Service d'intégration de données
renvoie une chaîne vide pour chaque ligne qui renvoie FALSE :
IIF( SALES > 100, EMP_NAME )
SALES
EMP_NAME
RETURN VALUE
150
John Smith
John Smith
50
Pierre Bleu
''
(empty string)
120
Sally Green
Sally Green
NULL
Greg Jones
''
(empty string)

Valeur de retour

value1
si la condition est TRUE.
value2
si la condition est FALSE.
Par exemple, l'expression suivante inclut la condition FALSE NULL de sorte que le
Service d'intégration de données
renvoie NULL pour chaque ligne qui renvoie FALSE :
IIF( SALES > 100, EMP_NAME, NULL )
SALES
EMP_NAME
RETURN VALUE
150
John Smith
John Smith
50
Pierre Bleu
NULL
120
Sally Green
Sally Green
NULL
Greg Jones
NULL
Si les données contiennent des caractères multioctets et que l'argument de condition compare les données de chaîne, la valeur de retour dépendra de la page de code et du mode mouvement de données du
Service d'intégration de données
.

IIF et types de données

Lorsque vous utilisez IIF, le type de données de la valeur de retour est identique à celui du résultat dont la précision est la plus élevée.
Par exemple, prenons l'expression suivante :
IIF( SALES < 100, 1, .3333 )
Le résultat TRUE (1) est un nombre entier et le résultat FALSE (.3333) est un nombre décimal. La précision du type de données décimal est plus élevée que celle du type nombre entier, le type de données de la valeur de retour est donc toujours décimal.
Lorsque vous exécutez un mappage en mode précision élevée et qu'au moins un résultat est de type double, le type de données de la valeur de retour sera double.

Utilisations spéciales de IIF

Utilisez des instructions IIF imbriquées pour tester plusieurs conditions. L'exemple suivant teste différentes conditions et renvoie 0 si la valeur des ventes est de 0 ou négative :
IIF( SALES > 0, IIF( SALES < 50, SALARY1, IIF( SALES < 100, SALARY2, IIF( SALES < 200, SALARY3, BONUS))), 0 )
Vous pouvez rendre cette logique plus accessible en lecture en ajoutant des commentaires :
IIF( SALES > 0, --then test to see if sales is between 1 and 49:   IIF( SALES < 50,    --then return SALARY1       SALARY1,       --else test to see if sales is between 50 and 99:          IIF( SALES < 100,           --then return              SALARY2,              --else test to see if sales is between 100 and 199:                 IIF( SALES < 200,                 --then return                    SALARY3,                   --else for sales over 199, return                      BONUS)               )            ), --else for sales less than or equal to zero, return       0)
Utilisez IIF dans des stratégies de mise à jour. Par exemple :
IIF( ISNULL( ITEM_NAME ), DD_REJECT, DD_INSERT)

Alternative à l'IIF

Utilisez DECODE au lieu d'IIF dans de nombreux cas. DECODE peut améliorer la lisibilité. Voici un exemple d'utilisation de DECODE au lieu d'IIF à l'aide du premier exemple de la section précédente :
DECODE( TRUE,    SALES > 0 and SALES < 50, SALARY1,    SALES > 49 AND SALES < 100, SALARY2,    SALES > 99 AND SALES < 200, SALARY3,    SALES > 199, BONUS)
La plupart du temps, vous pouvez utiliser une transformation filtre au lieu d'IIF pour optimiser des performances.