Question:
A migration where data are being unloaded/loaded generates LOAD cards where the first column in the load cards has a starting position higher than 1; e.g. POSITION( 2). Why?
Answer:
When the Batch Processor UNLOAD program is utilized, the unload dataset will have extra byte(s) at the beginning of each row if a nullable column exists on the table.
Because of this, the first column in the load cards is coded as starting at a higher position than 1 and the NULLIF parm are added as the last card, e.g. (NULLIF( 1) = X'FF).
Here is an example where the first column EMPNO starts in POSITION( 11) because the first 10 bytes are NULLIF indicators.
.DATA LOAD DATA INDDN PTILOAD RESUME YES LOG NO ENFORCE CONSTRAINTS DISCARDDN SYSDISC ERRDDN SYSERR MAPDDN SYSMAP WORKDDN (PTIUT1,PTIOUT) SORTDEVT SYSDA CONTINUEIF (72) = X'FF' INTO TABLE DSN81012.EMP IGNOREFIELDS NO (EMPNO POSITION( 11 ) CHAR( 6) ,FIRSTNME POSITION( *) VARCHAR ,MIDINIT POSITION( *) CHAR( 1) ,LASTNAME POSITION( *) VARCHAR ,WORKDEPT POSITION( *) CHAR( 3) NULLIF( 1) = X'FF' ,PHONENO POSITION( *) CHAR( 4) NULLIF( 2) = X'FF' ,HIREDATE POSITION( *) DATE EXTERNAL( 10) NULLIF( 3) = X'FF' ,JOB POSITION( *) CHAR( 8) NULLIF( 4) = X'FF' ,EDLEVEL POSITION( *) SMALLINT NULLIF( 5) = X'FF' ,SEX POSITION( *) CHAR( 1) NULLIF( 6) = X'FF' ,BIRTHDATE POSITION( *) DATE EXTERNAL( 10) NULLIF( 7) = X'FF' ,SALARY POSITION( *) DECIMAL NULLIF( 8) = X'FF' ,BONUS POSITION( *) DECIMAL NULLIF( 9) = X'FF' ,COMM POSITION( *) DECIMAL NULLIF( 10) = X'FF' )