Sumário

Search

  1. Prefácio
  2. A Linguagem de Transformação
  3. Constantes
  4. Operadores
  5. Variáveis
  6. Datas
  7. Funções
  8. Criação de funções personalizadas
  9. Referência de API da Função Personalizada

Referência de Linguagem de Transformação

Referência de Linguagem de Transformação

IIF

IIF

Retorna um dos dois valores especificados, com base nos resultados de uma condição.

Sintaxe

IIF(
condition
,
value1
[,
value2
] )
A tabela a seguir descreve os argumentos para este comando:
Argumento
Obrigatório/
Opcional
Descrição
condição
Obrigatório
A condição que você deseja avaliar. Você pode inserir qualquer expressão de transformação válida que avalie em TRUE ou FALSE.
value1
Obrigatório
Qualquer tipo de dados, exceto Binário. O valor a ser retornado se a condição for TRUE. O valor retornado é sempre o tipo de dados especificado por esse argumento. Você pode inserir qualquer expressão de transformação válida, incluindo outra expressão IIF.
value2
Opcional
Qualquer tipo de dados, exceto Binário. O valor a ser retornado se a condição for FALSE. Você pode inserir qualquer expressão de transformação válida, incluindo outra expressão IIF.
Diferente das funções condicionais em alguns sistemas, a condição FALSE (
valor2
) na função IIF não é requerida. Se você omitir
valor2
, a função retornará o seguinte quando a condição for FALSE:
  • 0 se
    valor1
    for um tipo de dados Numérico.
  • String vazia se
    valor1
    for um tipo de dados String.
  • NULL se
    valor1
    for um tipo de dados Data/Hora.
Por exemplo, a expressão a seguir não inclui uma condição FALSE e
value1
é um tipo de dados de string, de modo que o
Serviço de Integração do PowerCenter
retorna uma string vazia em cada linha avaliada como 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)

Valor de Retorno

valor1
se a condição for TRUE.
valor2
se a condição for FALSE.
Por exemplo, a expressão a seguir inclui a condição FALSE NULL, de modo que o
Serviço de Integração do PowerCenter
retorna NULL em cada linha avaliada como 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
Se os dados contiverem caracteres multibyte e o argumento da condição comparar dados de string, o valor retornado dependerá da página de código e do modo de movimento de dados do
Serviço de Integração do PowerCenter
.

IIF e tipos de dados

Quando você usar IIF, o tipo de dados do valor retornado será o mesmo tipo de dados do resultado com a maior precisão.
Por exemplo, você tem a seguinte expressão:
IIF( SALES < 100, 1, .3333 )
O resultado TRUE (1) é um inteiro e o resultado FALSE (.3333) é um decimal. O tipo de dados Decimal tem precisão maior que Integer, portanto o tipo de dados do valor retornado é sempre um Decimal.
Quando você executar uma sessão no modo de alta precisão e pelo menos um resultado for Double, o tipo de dados do valor retornado será Double.

Usos Especiais de IIF

Use declarações IIF aninhadas para testar várias condições. O seguinte exemplo testará várias condições e retornará 0 se as vendas forem 0 ou negativas:
IIF( SALES > 0, IIF( SALES < 50, SALARY1, IIF( SALES < 100, SALARY2, IIF( SALES < 200, SALARY3, BONUS))), 0 )
Você pode tornar essa lógica mais legível ao adicionar comentários:
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)
Use IIF em estratégias de atualização. Por exemplo:
IIF( ISNULL( ITEM_NAME ), DD_REJECT, DD_INSERT)

Alternativa para IIF

Use DECODE, em vez de IIF em muitos casos. DECODE pode melhorar a legibilidade. O seguinte exemplo mostra como usar DECODE, em vez de IIF, usando o primeiro exemplo da seção anterior:
DECODE( TRUE,    SALES > 0 and SALES < 50, SALARY1,    SALES > 49 AND SALES < 100, SALARY2,    SALES > 99 AND SALES < 200, SALARY3,    SALES > 199, BONUS)
Você geralmente pode usar uma transformação de Filtro, em vez de IIF, para maximizar o desempenho da sessão.