Simple cl containing a very simple OPNQRYF statement and an OVERDBF SHARE(*YES). Program was working for weeks, then for about 2 hours when the program would be submitted to batch it was ignoring the OPNQRYF and selecting all records... but if I submit on hold, then copy paste the call on the command line it works fine, when I release... it selects all records in the file or skips the opnqryf or ignores the SHARE????
Both the OVRDBF command and the OPNQRYF command have a paramter called "OPNSCOPE". This parameter determines which programs in the job will be affected by the override/open and which ones won't.
The default value is *ACTGRPDFN which means that the override scope is defined by the activation group that the command is run from. If it's run from the default activation group, then the scope is based on the call-level. When run from a different activation group, the scope is that activation group itself.
This means that if you call it from the command line (which is always the default activation group) the override and opnqryf will affect any programs that you call until you use CLOF/DLTOVR, or end the current call-stack entry (i.e. exit the command-prompt that you're running, such as when you sign off, or if you typed CALL QCMD, when you exit that call, etc.)
If you call it from an ILE CL program that's running in a genuine ILE activation group, however, the ovrdbf/opnqryf will only affect programs that happen to be in the same activation group.
Try changing the OVRDBF command to specify OVRSCOPE(*CALLLVL) and the OPNQRYF command to specify OVRSCOPE(*JOB). That seems to be the way you expect it to work, so you might as well code it that way :)