PROC DB2UTIL takes the length of a numeric variable (as defined in SAS and not the number of digits) and uses that length in formatting the value that is passed over to DB2.
If the number is large enough that the number of digits that make up the number is more than the length, SAS passes over the value in scientific notation and some of the value is lost. This results in either the incorrect value not being found or the incorrect value being found and thus incorrectly being updated/deleted. This occurs with a delete or update when a MAPTO clause isn't present in the PROC DB2UTIL step.
For example:
If I have a numeric that is defined with a length of 6 and contains the value of 1111111 rather than passing over the correct value of 1111111, SAS will pass over 1.11e6 instead. This results in DB2 looking for the value of 1110000 instead of correctly looking for 1111111.
The workaround is to add a MAPTO clause to the PROC DB2UTIL step.