Closing QSAM files
Use the CLOSE
statement to disconnect
your program from a QSAM file. If you try to close a file that is
already closed, you will get a logic error.
About this task
If you do not close a QSAM file, the file is automatically closed for you under the following conditions:
- When the run unit ends normally, the run time closes all open files that are defined in any COBOL programs in the run unit.
- If the run unit ends abnormally and the
TRAP(ON)
runtime option is in effect, the run time closes all open files that are defined in any COBOL programs in the run unit. - When Language Environment® condition handling
has completed and the application resumes in a routine other than
where the condition occurred, the run time closes all open files that
are defined in any COBOL programs in the run unit that might be called
again and reentered.
You can change the location where the program resumes running (after a condition is handled) by moving the resume cursor with the Language Environment CEEMRCR callable service or by using language constructs such as a C longjmp.
- When you use
CANCEL
for a COBOL subprogram, the run time closes any open nonexternal files that are defined in that program. - When a COBOL subprogram with the
INITIAL
attribute returns control, the run time closes any open nonexternal files that are defined in that program. - When a thread of a multithreaded application ends, both external and nonexternal files that you opened from within that same thread are closed.
File status key data items in the DATA
DIVISION
are set when these implicit CLOSE
operations
are performed, but your EXCEPTION/ERROR
declarative is not invoked.
Errors: If you open a QSAM file in a multithreaded application, you must close it from the same thread of execution from which the file was opened. Attempting to close the file from a different thread results in a close failure with file-status condition 90.