Вложенное использование If-Then-Else в DataStage

Я пытаюсь написать следующие вложенные операторы If-Then-else на этапе преобразования DataStage, но это дает мне ошибку компиляции. Кто-нибудь может сказать мне, есть ли другой способ сделать это?

If IsNotNull(DSLink16.DECISION_ID) 
Then (
    If DSLink16.DECISION_RESULT = 1 Then (
        If DSLink16.DECISION_CODE = 'ALOW' Then 'DENY'
        Else If DSLink16.DECISION_CODE = 'DENY' Then 'ALOW'
        Else If DSLink16.DECISION_CODE = 'NOIS' Then 'NOIS'
    )
    Else If DSLink16.DECISION_RESULT = 2 Then 'DSMS'
    Else If DSLink16.DECISION_RESULT = 3 Then (
        If APPELANT_CODE = 'CLMT' Then 'ALOW' Else 'DENY'
    )
    Else If DSLink16.DECISION_RESULT = 4 Then (
        If APPELANT_CODE = 'CLMT' Then 'DENY' Else 'ALOW'
    )
    Else If DSLink16.DECISION_RESULT = 5 Then DSLink16.DECISION_CODE
    Else If DSLink16.DECISION_RESULT = 6 or DSLink16.DECISION_RESULT = 7 or DSLink16.DECISION_RESULT = 8 Then 'DENY'
)

Else (
    If DSLink16.DECISION_RESULT = 1 Then 'DENY'
    Else If DSLink16.DECISION_RESULT = 2 Then 'DENY'
    Else If DSLink16.DECISION_RESULT = 3 Then 'ALOW'
    Else If DSLink16.DECISION_RESULT = 4 Then 'DENY'
    Else If DSLink16.DECISION_RESULT = 5 Then 'ALOW'
    Else If DSLink16.DECISION_RESULT = 6 Then 'DENY'
    Else If DSLink16.DECISION_RESULT = 7 Then 'DENY'
    Else If DSLink16.DECISION_RESULT = 8 Then 'DENY'
)

person Prerak Tiwari    schedule 06.06.2015    source источник
comment
Как только я нажимаю ОК, он становится красным.   -  person Prerak Tiwari    schedule 06.06.2015
comment
удалите все и снова добавьте один блок if / else. Как только он станет красным, вы поймете, что не так. Если вы его нашли, дайте нам знать.   -  person rene    schedule 06.06.2015


Ответы (2)


Похоже, что с каждым If должен быть связан соответствующий блок Else. Для меня сработало следующее:

If IsNotNull(DSLink16.DECISION_ID) 
Then (
              If DSLink16.DECISION_RESULT = 1 Then (
                                If DSLink16.DECISION_CODE = 'ALOW' Then 'DENY'
                               ELSE If DSLink16.DECISION_CODE = 'DENY' Then 'ALOW'
                               ELSE 'NOIS' 
                )   ELSE If DSLink16.DECISION_RESULT = 2 Then 'DSMS'   ELSE If DSLink16.DECISION_RESULT = 3 Then (
                                If DSLink16.APPELANT_CODE = 'CLMT' then 'ALOW' Else 'DENY'
                )   ELSE If DSLink16.DECISION_RESULT = 4 Then (
                                If DSLink16.APPELANT_CODE = 'CLMT' Then 'DENY' Else 'ALOW'
                )  ELSE If DSLink16.DECISION_RESULT = 5 Then DSLink16.DECISION_CODE
              ELSE   'DENY' 
)

Else (
            If DSLink16.DECISION_RESULT = 1 Then 'DENY' 
                ELSE If DSLink16.DECISION_RESULT = 2 Then 'DENY' 
                ELSE If DSLink16.DECISION_RESULT = 3 Then 'ALOW' 
                ELSE If DSLink16.DECISION_RESULT = 4 Then 'DENY' 
                ELSE If DSLink16.DECISION_RESULT = 5 Then 'ALOW' 
                ELSE If DSLink16.DECISION_RESULT = 6 Then 'DENY' 
                ELSE If DSLink16.DECISION_RESULT = 7 Then 'DENY' 
                ELSE If DSLink16.DECISION_RESULT = 8 Then 'DENY'
                                                                ELSE 'DENY'                )
person Prerak Tiwari    schedule 08.06.2015

Предполагая, что DECISION_RESULT - какое-то целое число, последний блок может быть записан:

If DSLink16.DECISION_RESULT = 3 Or DSLink16.DECISION_RESULT = 5
Then "ALOW" Else "DENY"
person Ray Wurlod    schedule 30.04.2020