A fix is available
APAR status
Closed as program error.
Error description
This APAR addresses various defects related to processing of EXTRACTED IMS or other non-DB2 data. Customer is processing EXTRACTED IMS or other non-DB2 data. The Legacy Table (LT), which describes the record layout, does not properly reflect the record's attributes by using a fixed length layout (while it has variable length) and contents (the records may be shorter than defined via LT). Because of that, Optim marks some of the columns as missing and having the NO_VALUE attribute when the record read for processing is shorter than expected. The following problems will be addressed by this APAR: 1.The EXTRACT Browse function may show garbage for some columns when shorter records follow records with more data on EXTRACT input. 2.When the variable length records of VSAM or sequential origin are being inserted back in to a variable length destination file then the records will be expanded to the full length of the LT used to describe the destination table/file. 3.When the EXTRACT is being processed by the CONVERT function then the converted data may grow significantly in size (compared to the EXTRACT) because the records will be expanded to the full length of the LT used to describe the destination table/file. 4.When customer uses a Column Map PROCEDURE (CM PROC) to process the records, and uses getcolumnasbytes/getcolumnvalue functions, the returned function value is a nil (NULL) indicating that no value was available for the requested column in the record being processed. Optim does not provide a function to set the destination column to the same state of having "no value" since LTs do not allow for columns to accept a NULL value (in the meaning of DB2). Furthermore Optim requires that a destination column, on which the CM PROC has been defined, always receives a value. This may force the user to assign a value which does not reflect the NO_VALUE state of the source value.
Local fix
Problem summary
**************************************************************** * USERS AFFECTED: All Optim users working with non-DB2 data * * (VSAM, sequential and IMS). * **************************************************************** * PROBLEM DESCRIPTION: Optim may incorrectly process Legacy * * Table data with records shorter than * * the record definition within the LT. * * Optim does not provide for a function * * which may set a NO_VALUE state on a * * column within an LT. * **************************************************************** See Error description. The problem is a current product design limitation.
Problem conclusion
Optim processing logic in respect to LTs incorrectly describing the record structure and length of data will be corrected and enhanced. Optim will notify the user during EXTRACT file creation that it detected records with data shorter than the LT definition. In addition, the following new messages will be issued when the trailing column being truncated is not of the type of CHARACTER, GRAPHIC or BINARY. WARNING: Table (1) had 2 records with trailing column value truncated mid-value. The trailing column was of data type other than CHAR/GRAPHIC/BINARY. The truncated value has been discarded. Consider updating the Legacy Table definition and using an ODO/MAX_OCCURS array. Optim processing logic will be enhanced and allow for a column/ field value in a LT to be set to a NULL value to indicate the lack of a value (NO_VALUE) condition. A column from a LT may have the state of NO_VALUE when the associated LT record does not contain a value for it. This may occur for ODO type values when not all values of an array have been provided, or for variable length records when the record is shorter than its maximum documented length and some fields may not receive a value when such record is being extracted. LT fields/columns with the NO_VALUE state can be currently processed only via CM EXITs (type 2) and CM PROCs and getcolumnvalue() type functions. Such functions would return a nil for a column with the NO_VALUE attribute. However the user had no means to set a destination LT column to NO_VALUE and had been required to set it to some other value, possibly losing the the NO_VALUE attribute. This enhancement will allow for the setcolumnvalue() family of functions to set a LT column a NO_VALUE state by assigning it a nil (NULL) value via a CM_PROC. Example of use: PROC LOCAL RET_ASTT_OPTN_PAYEE_STATE 1 state = optim.source.getcolumnvalue() 2 if state == nil then 3 optim.print("Column value is: NO_VALUE") 4 -- We have a field in the LT which had NO_VALUE because 5 -- it does not exist in the record which is too short 6 -- We still allow an assignment to it because it could 7 -- be included in an ODO and the occurs value could have 8 -- been expanded. And we have enough room in the record for it. 9 -- Note that we actually require that the target column be set 10 -- and we report an error for columns having no value assigned. 11 -- After APAR PH29619/PH29667 the following value assignment 12 -- will be accepted which assigns a NO_VALUE state to the 13 -- destination column. This is equivalent to "regular" value 14 -- assignment but at the moment we won't do anything with this 15 -- flag, just suppress the "value not assigned error". 16 optim.target.setcolumnvalue(nil) 17 else 18 -- We expect the nil above because the field has NO_VALUE 19 -- in the record which is shorter than expected. 20 -- We should never see this with the short record. 21 optim.print("Column value is: >" .. state .. "<") 22 optim.target.setcolumnvalue(state) 23 end
Temporary fix
Comments
APAR Information
APAR number
PH29619
Reported component name
OPTIM MOVE FOR
Reported component ID
5655V0700
Reported release
B70
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt / Xsystem
Submitted date
2020-09-17
Closed date
2020-11-04
Last modified date
2020-12-01
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Modules/Macros
FOP00003 FOP00103 FOP00203 FOP00303 FOP00B FOP01B FOP05B FOP07B FOP08B FOP09B FOP0AB FOP0BB FOP0ITKA FOP1ODRV FOP1OSFN FOP3DTPR FOP4IPMN FOP4PEMN FOP4PMMN FOP4SVC FOP4TRCE FOP4XCCN FOP4XEML FOP4XSSN FOP9APIM FOP9GINF FOPCFPMN FOPCXLIB FOPHSTM FOPIO FOPMADDE FOPMAFCN FOPMAIN FOPMAMAI FOPMARCN FOPMCDRT FOPMCENU FOPMCMAI FOPMCOFN FOPMCOLA FOPMCOLP FOPMDBMN FOPMDDDL FOPMDMAI FOPMDPRC FOPMDXTR FOPMECMN FOPMEMAI FOPMIXMM FOPMMCMN FOPMMCMR FOPMMJBS FOPMMUNU FOPMMUTL FOPMSELM FOPMTMDB FOPMUXIM FOPODPP FOPOMN FOPRS9 FOPTDS25 FOPUMCBT FOPUUNLD FOPVOU FOPZFBMN FOPZFMMN FOPZMAIN FOPZSUB
Fix information
Fixed component name
OPTIM MOVE FOR
Fixed component ID
5655V0700
Applicable component levels
RB70 PSY UI72393
UP20/11/10 P F011
Fix is available
Select the PTF appropriate for your component level. You will be required to sign in. Distribution on physical media is not available in all countries.
[{"Business Unit":{"code":"BU054","label":"Systems w\/TPS"},"Product":{"code":"SG19M","label":"APARs - z\/OS environment"},"Platform":[{"code":"PF054","label":"z\/OS"}],"Version":"B70"}]
Document Information
Modified date:
02 December 2020