fairly smple, in a "normal" setup:
- each time you precompile your source into a dbrm and a precompiled source, DB2 puts a string in it both. It looks like a timestamp but isn't. That is the version of the package.
- bind turns your dbrm into a package, compile turns your pre-compiled source into a load
- at run time this "version" out of the load module is used (together with the name,...) to find the corresponding package in DB2. The key of a package inside DB2 is location.collection.name.version . location and collection are found via the plan you specify at run time, name and version are found in the loadmodule.
Because version is part of the key, multiple versions can co-exist. run with one loadmodule => use one package, run with another => use another package.