IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

ICE126A 0 INCONSISTENT *INREC IFTHEN 0 REFORMATTING FIELD


IBM Mainframe Forums -> DFSORT/ICETOOL
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
vini_srcna

Active User


Joined: 26 May 2005
Posts: 178
Location: Copenhagen, Denmark

PostPosted: Mon Jan 21, 2008 9:22 pm
Reply with quote

File 1: LRECL= 333,FB
Key: 1 to 10 (customerid CHAR(10)) (File sorted on customerid and duplicates are removed)

Cusotmerid1.......address....etc...
Cusotmerid2.......address....etc...
Cusotmerid3.......address....etc...



FILE 2: LRECL=20,FB (contains only customer id and kobnr)
Key:1 to 10 (customerid).

customerid1kobnr1
customerid1kobnr2
customerid1kobnr3
customerid3kobnr1


we want the output to somehow look like Left outer join results in DB2. (IF it was joined on Customer id)

OUTPUTFILE:

Cusotmerid1.......address....etc...kobnr1
Cusotmerid1.......address....etc...kobnr2
Cusotmerid1.......address....etc...kobnr3
Cusotmerid2.......address....etc...
Cusotmerid3.......address....etc...kobnr1


If the customer number in FILE1 is not in FILE2 then the kobnr (CHAR(10)) should be set as spaces. Customer id can have mulitple kob numbers and all should be in the output file.
ex cutomerid1 has three kob numbers.(kobnr1,kobnr2 and kobnr3)

Please help me with this. I tried the bleow one and it didnt work. I got it from this forum and edited to best of my knowledge. It doesnt work..! it gives the below error.

//TOOLIN DD *
COPY FROM(FILEB) TO(T1) USING(CTL1)
COPY FROM(FILEA) TO(T1) USING(CTL2)
SPLICE FROM(T1) TO(T2) ON(1,10,CH) -
WITHALL WITH(5,4) WITH(334,10) KEEPNODUPS
SORT FROM(T2) TO(OUT) USING(CTL3)
/*
//CTL1CNTL DD *
INREC BUILD=(1,10,9:5,6,443:X)
/*
//CTL2CNTL DD *
INREC OVERLAY=(334:SEQNUM,8,ZD)
/*
//CTL3CNTL DD *
SORT FIELDS=(81,8,CH,A)
OUTREC BUILD=(1,433)
/*

----error--

ICE201I E RECORD TYPE IS F - DATA STARTS IN POSITION 1
ICE126A 0 INCONSISTENT *INREC IFTHEN 0 REFORMATTING FIELD FOUND
ICE751I 0 C5-K24705 C6-K90007 C7-K90000 C8-K90007 E9-K90007 E7-K24705
ICE052I 3 END OF DFSORT

Please help...thanks
Back to top
View user's profile Send private message
Frank Yaeger

DFSORT Developer


Joined: 15 Feb 2005
Posts: 7129
Location: San Jose, CA

PostPosted: Mon Jan 21, 2008 10:35 pm
Reply with quote

hmmm ... your post is rather confusing. The customerid values you show are 11 bytes whereas you say they're 10 bytes and you have Cusotmeridn in file1 and customeridn in file2 which don't match. Also you seem to be doing something special with 5,4 but I can't tell what considering this would be part of the customerid in 1,10. The reason you got the ICE126A message is because you have 1,10,9:5,6 which means you're trying to put a field at position 9 after you've already put a field at positions 1-10 - that is, you have overlapping fields.

Assuming that your input file1 (FB/133) looks like this:

Code:

customerid1.......address....etc...
customerid2.......address....etc...
customerid3.......address....etc...


and your input file2 (FB/20) looks like this:

Code:

customerid1kobnr1
customerid1kobnr2
customerid1kobnr3
customerid3kobnr1


and you want your output file (FB/343) to look like this:

Code:

customeri1.......address....etc............................kobnr1
customeri1.......address....etc............................kobnr2
customeri1.......address....etc............................kobnr3
customeri2.......address....etc............................
customeri3.......address....etc............................kobnr1


you can use a DFSORT job like this:

Code:

//S1    EXEC  PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG  DD SYSOUT=*
//IN1 DD DSN=...  input file1 (FB/333)
//IN2 DD DSN=...  input file2 (FB/20)
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(MOD,PASS)
//OUT DD DSN=...  output file (FB/343)
//TOOLIN DD *
COPY FROM(IN1) TO(T1) USING(CTL1)
COPY FROM(IN2) TO(T1) USING(CTL2)
SPLICE FROM(T1) TO(OUT) ON(1,10,CH) KEEPNODUPS -
  WITHALL WITH(334,10)
/*
//CTL1CNTL DD *
  INREC OVERLAY=(343:X)
/*
//CTL2CNTL DD *
  INREC BUILD=(1,10,334:11,10)
/*
Back to top
View user's profile Send private message
vini_srcna

Active User


Joined: 26 May 2005
Posts: 178
Location: Copenhagen, Denmark

PostPosted: Tue Jan 22, 2008 3:31 pm
Reply with quote

Hi Frank,

Thanks a lot for your help. Great solution..It worked for me.

There are 14 million rows. Do u think this is still a better solution than a program..?. I guess it should perform better than a program written in PL1 and moreover its a one time process.

In fact I was asked this question and I was able to justify. Would like to know your opinion on performance.

Thanks again ..!
Vinay
Back to top
View user's profile Send private message
Frank Yaeger

DFSORT Developer


Joined: 15 Feb 2005
Posts: 7129
Location: San Jose, CA

PostPosted: Tue Jan 22, 2008 9:09 pm
Reply with quote

I can't tell you which will perform better ... it depends on too many things.

The best way to find out (really, the only way) is to try it both ways and see which performs better based on your own criteria for performance.
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> DFSORT/ICETOOL

 


Similar Topics
Topic Forum Replies
No new posts Replace Multiple Field values to Othe... DFSORT/ICETOOL 12
No new posts Join 2 files according to one key field. JCL & VSAM 3
No new posts How to move the first field of each r... DFSORT/ICETOOL 5
No new posts S0C7 - Field getting overlayed COBOL Programming 2
No new posts Masking variable size field - min 10 ... DFSORT/ICETOOL 4
Search our Forums:

Back to Top