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(零)的值。我不能爲了我的生活找出原因。當我在調試器中運行它並評估解碼時(右鍵單擊表達式,單擊'評估表達式',將解碼粘貼),它的計算結果爲YES或NO CHANGE正確。但是當它在調試器和生產中實際運行時,它仍然計算爲零。有人知道爲什麼嗎?

+0

+1使用[我最喜歡的DECODE(TRUE,...)絕招](http://stackoverflow.com/a/9979906/95)! –

回答

0

表達對我來說很好。您應該檢查使用它的字段的定義。它或者被聲明爲integer(或其他數字數據類型),或者它具有分配的默認值。

+1

我終於找到了問題。使用它的字段被正確地轉換(作爲一個字符串),但是在下游,稍後在映射中,該值被轉換爲一個整數。演員陣容通過映射傳播回我的原始解碼器,並將所有東西弄髒。幾乎你在想什麼 – bigbenbt