1

У меня есть следующее заявление декодирования в качестве преобразования выражения в Informatica:Informatica расшифровывает возвращает запрещенное значение

(DECODE 
(TRUE 
, OPERATION1='I' and NOT ISNULL(a_new),'YES' 
, OPERATION1='D'and NOT ISNULL(a_old),'YES' 
, OPERATION1='U'and ((
    (a<>b) 
    or (ISNULL(a_new) and NOT ISNULL(a_old)) 
    or (NOT ISNULL(a_new) and ISNULL(a_old)) 
    ) 
),'YES','NO CHANGE') 
) 

Где a_new и a_old являются целыми числами (когда они появляются на всех).

Вот странная часть:

Это расшифровывает заявление, при запуске, постоянно возвращает значение 0 (ноль). Почему я не могу понять, почему. Когда я запускаю это в отладчике и оцениваю декодирование (щелкните правой кнопкой мыши на выражении, нажмите «Оценить выражение», вставьте декодирование в), он правильно оценивает ДА ​​или НЕТ ИЗМЕНЕНИЙ. Но когда он действительно запускается, как в отладчике, так и в производстве, он по-прежнему оценивает ноль. Кто-нибудь знает, почему?

+0

+1 для использования [мой любимый DECODE (TRUE, ...) трюк] (http://stackoverflow.com/a/9979906/95)! –

ответ

0

Выражение выглядит хорошо для меня. Вы должны проверить определение поля, который использует его. Либо он объявлен как integer (или какой-либо другой тип числовых данных), либо имеет назначенное значение по умолчанию.

+1

Я, наконец, нашел проблему. Поле, которое его использует, было корректно введено (как строка), но waaaay вниз по течению, позже в сопоставлении, значение было отлито как целое. Литье распространялось обратно через отображение в мой первоначальный декодирование и все загрязняло. Довольно многое, о чем вы думали – bigbenbt

Смежные вопросы