dfg 8-Dec-2017 APAR JR58660 PX transformer stage nullable stage variables are incorrectly set to NULL at the start of every link evaluation cycle. This can cause data corruption PROBLEM: A Stage variable when set to input column value that could be null, and if the stage variable is used in more than one output links of transformer, then the output in the first output link is correct, but second output link is not getting null value instead gives some incorrect values. E.g. stageVar0=NULL Stage variable stageVar0 is being used in two places 1. In first output link lnk1_outcol1 = NullToZero(vsDSP0102) 2. In second output link lnk2_outcol2 = NullToZero(vsDSP0102) After lnk1 is processed, all stage variables nullability is reset, so in the second link for the derivation "lnk2_outcol2 = NullToZero(vsDSP0102)" lnk2_outcol2 should be null but instead it may contain an incorrect value. RESOLUTION: As part of the fix for APAR JR57226 local nulls are cleared after every transfer on the output link which is also clearing stage variables thought the scope of the variable should be across the links. The problem is corrected in this APAR JR58660 and stage variables are not cleared after every link evaluation cycle. This patch requires recompilation of the jobs which ave transformers with more than one output link and that use stage variables. To simplify process of identification of the probable jobs for recompilation follow the steps given below. The steps provided will identify jobs with transformer stages that has more than one output links. 1. Log on the DataStage Server machine through a shell (e.g. ssh) 2. Setup the following environment variables export ISHOME= (E.g. /opt/IBM/InformationServer) export ISDOMAIN=domain with :port if required (E.g. dstageserver.ibm.com:9443) export ISUSER=isadmin export ISPASSWORD=nnn export DSW="$ISHOME/ASBNode/bin/DStageWrapper.sh -domain $ISDOMAIN -user $ISUSER -password $ISPASSWORD" export JOBORCONT=DSJobDef export PINTYPE=DSOutputPin export PINREL=isSourceOf_Link export PINFROMSTG=has_OutputPin export SHOWSTAGETYPE= export TRFONLY='and stg.StageType = "CTransformerStage"' export PROJECTFILTER= 3. For a list of project/jobs, use: $DSW -query "select job.DSNameSpace, job.name, stg.name $SHOWSTAGETYPE, lnk.isSystem from stg in DSStage, job in $JOBORCONT, pin in stg->$PINFROMSTG, lnk in pin->$PINREL where stg._xmeta_lockingRoot = rid(job) $TRFONLY $PROJECTFILTER order by job.DSNameSpace, job.name, stg.name" | uniq -d | cut -f1,2 | uniq Eg. Output will be similar to: $DSW -query "select job.DSNameSpace, job.name, stg.name $SHOWSTAGETYPE, lnk.isSystem from stg in DSStage, job in $JOBORCONT, pin in stg->$PINFROMSTG, lnk in pin->$PINREL where stg._xmeta_lockingRoot = rid(job) $TRFONLY $PROJECTFILTER order by job.DSNameSpace, job.name, stg.name" | uniq -d | cut -f1,2 | uniq dstageserver:dstage1 xfm_job1 dstageserver:dstage1 xfm_job2 dstageserver:dstage1 xfm_job3 ... Where xfm_job1 of dstage1 project has transformer stage with more than one output links. 4. To check the jobs in shared Containers repeat the test by setting export JOBORCONT=DSSharedContainerDef