I'll give it a go :
A cobol compiler can't (couldn't) compile SQL : that is not its job. so you need to DB2 precompile.
The precompiler changes the SQL into something that the cobol compiler understands : CALL
Another output of the precompiler is the DBRM = the info that the precompiler got from the SQL-statements.
Think of it as a subroutine that does something like this (very very simplified):
procedure division using stmtno, var1, var2 ,var3,...
Evaluate stmtno
when 1 then perform the-first-SQL
when 2 then perform the-second-SQL
...
end-evaluate
.
the-first-sql.
move var1 to key-field-tab1
read vsam1
move col3 to keyfiedl-tab2
read vsam2
move column3 to var3
.
the part in the paragraph the-frst-sql is "The accesspath".
To make sure that "the-first-sql-statement" in your cobol program is the same as what is in the DBRM, DB2 chose to use a standard solution : The caller gives a timestamp (actually a version or contoken) and the callee (is that a word ?) checks if that contoken matches with what it has in its own Working-storage.
I can explain it to you, but i can not understand it for you.