View previous topic :: View next topic
|
Author |
Message |
mmcnary
New User
Joined: 07 Nov 2006 Posts: 3
|
|
|
|
I have a process where I create control cards by querying a DB2 table and creating the correct layout for the card on a single line. I then use SYNCSORT to break up the line by a delimited value to create lines that will fit in an 80 byte record that can be used for another process.
I am getting the error when I run the file through a PARSE/BUILD to perform this split process, even when I do the sort in-place. The failing process is cloned from another process that does the exact same thing and executes without issue. If this was completely new process, I would keep trying to tweak it, but I copied this directly from a job that works fine.
Here is my SYNCSORT control card
Code: |
OPTION COPY
OUTFIL PARSE=(%01=(ENDBEFR=C'&&',FIXLEN=800),
%02=(ENDBEFR=C'&&',FIXLEN=800),
%03=(ENDBEFR=C'&&',FIXLEN=800),
%04=(ENDBEFR=C'&&',FIXLEN=800),
%05=(ENDBEFR=C'&&',FIXLEN=800),
%06=(ENDBEFR=C'&&',FIXLEN=800),
%07=(ENDBEFR=C'&&',FIXLEN=800),
%08=(ENDBEFR=C'&&',FIXLEN=800),
%09=(ENDBEFR=C'&&',FIXLEN=800),
%10=(ENDBEFR=C'&&',FIXLEN=800)),
BUILD=(%01,/,%02,/,%03,/,%04,/,%05,/,%06,%07,/,%08,/,%09,/,%10)
|
Here is the JCL step (with JEM displaying the card)
Code: |
//PARSE2 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DISP=SHR,DSN=DB2SYS.TOOLBOX.DB2D.NDMGEN.OUTPUT
//SORTOUT DD DISP=SHR,DSN=DB2SYS.TOOLBOX.DB2D.NDMGEN.OUTPUT
//SYSIN DD DISP=SHR,DSN=DB2SYS.TOOLBOX.DB2D.IBP.CTL(CRENDM04)
----+----1----+----2----+----3----+----4----+----5----+----6----+----7
OPTION COPY
OUTFIL PARSE=(%01=(ENDBEFR=C'&&',FIXLEN=800),
%02=(ENDBEFR=C'&&',FIXLEN=800),
%03=(ENDBEFR=C'&&',FIXLEN=800),
%04=(ENDBEFR=C'&&',FIXLEN=800),
%05=(ENDBEFR=C'&&',FIXLEN=800),
%06=(ENDBEFR=C'&&',FIXLEN=800),
%07=(ENDBEFR=C'&&',FIXLEN=800),
%08=(ENDBEFR=C'&&',FIXLEN=800),
%09=(ENDBEFR=C'&&',FIXLEN=800),
%10=(ENDBEFR=C'&&',FIXLEN=800)),
BUILD=(%01,/,%02,/,%03,/,%04,/,%05,/,%06,%07,/,%08,/,%09,/,%10)
//
|
Here is the error message I am getting:
Code: |
WER813I INSTALLATION OPTIONS IN MFX LOAD LIBRARY WILL BE USED
WER276B SYSDIAG= 3898825, 8393328, 8393328, 9559205
WER164B 6,900K BYTES OF VIRTUAL STORAGE AVAILABLE, MAX REQUESTED,
WER164B 0 BYTES RESERVE REQUESTED, 1,008K BYTES USED
WER146B 16K BYTES OF EMERGENCY SPACE ALLOCATED
WER108I SORTIN : RECFM=FB ; LRECL= 800; BLKSIZE= 8000
WER073I SORTIN : DSNAME=DB2SYS.TOOLBOX.DB2D.NDMGEN.OUTPUT
WER110I SORTOUT : RECFM=FB ; LRECL= 800; BLKSIZE= 8000
WER074I SORTOUT : DSNAME=DB2SYS.TOOLBOX.DB2D.NDMGEN.OUTPUT
WER247A SORTOUT HAS INCOMPATIBLE LRECL
WER211B SYNCSMF CALLED BY SYNCSORT; RC=0000
WER449I SYNCSORT GLOBAL DSM SUBSYSTEM ACTIVE
|
Here is a snippet of the input data. The '&&' is the embedded delimiter character. There are 9 occurrences per line of input.
Code: |
COPY -&& FROM ( -&&
COPY -&& FROM ( -&&
COPY -&& FROM ( -&&
COPY -&& FROM ( -&&
|
|
|
Back to top |
|
 |
Joerg.Findeisen
Senior Member

Joined: 15 Aug 2015 Posts: 1394 Location: Bamberg, Germany
|
|
|
|
While your are having FIXLEN=800 how can it then be split to FB80 records with the method you have chosen? Add REMOVECC keyword. |
|
Back to top |
|
 |
mmcnary
New User
Joined: 07 Nov 2006 Posts: 3
|
|
|
|
Joerg.Findeisen wrote: |
While your are having FIXLEN=800 how can it then be split to FB80 records with the method you have chosen? Add REMOVECC keyword. |
I am sorry, I didn't include the entire process in my original post.
There are subsequent steps in the job that will copy the resulting records into an 80 byte file and do some other cleanup before passing the file over to the end process, which will execute NDM to copy the files referenced in the control cards to a different LPAR.
I hate to code control cards by hand when I can get the machine to generate them for me. So I came up with a process to automate this CC creation.
This process was copied from one I developed that creates DCLGEN control cards from the catalog and executes them to create an entire database worth of DCLGEN members. We use it to recreate them every time we have a data model change. |
|
Back to top |
|
 |
Rohit Umarjikar
Global Moderator

Joined: 21 Sep 2010 Posts: 3099 Location: NYC,USA
|
|
|
|
It says clearly in the error message ..
either change the sort output dcb or change the build to match output dcb |
|
Back to top |
|
 |
Joerg.Findeisen
Senior Member

Joined: 15 Aug 2015 Posts: 1394 Location: Bamberg, Germany
|
|
|
|
Change the BUILD as follows to fix the issue.
Code: |
BUILD=(%01,/,%02,/,%03,/,%04,/,%05,/,%06,/,%07,/,%08,/,%09,/,%10) |
|
|
Back to top |
|
 |
mmcnary
New User
Joined: 07 Nov 2006 Posts: 3
|
|
|
|
Joerg.Findeisen wrote: |
Change the BUILD as follows to fix the issue.
Code: |
BUILD=(%01,/,%02,/,%03,/,%04,/,%05,/,%06,/,%07,/,%08,/,%09,/,%10) |
|
I see that I missed a line break in the build statement.
Unfortunately, this did not fix the issue.
I am breaking a single 800 byte record into 9 800 byte records using the PARSE and BUILD commands. And I have attempted to do this with a variety of SORTOUT files. |
|
Back to top |
|
 |
dneufarth
Active User

Joined: 27 Apr 2005 Posts: 420 Location: Inside the SPEW (Southwest Ohio, USA)
|
|
|
|
I’m confused. 9 output records, but 10 parsed variables in BUILD? Writing SORTOUT replacing SORTIN (same DSN)? |
|
Back to top |
|
 |
Joerg.Findeisen
Senior Member

Joined: 15 Aug 2015 Posts: 1394 Location: Bamberg, Germany
|
|
|
|
To check what's wrong, add a reasonable amount of records to the STOPAFT. Write the SORTOUT to SYSOUT=* then. SORT will tell you the expected attributes in the WER110I msg. May it be of help.
Code: |
OPTION COPY,STOPAFT=100 |
|
|
Back to top |
|
 |
|
|