当 rpgle 程序正在使用该文件时,如何清除该程序中的物理文件 (CLRPFM)

Kun*_*oy 0 rpg rpgle ibm-midrange

我有一个 RPGLE 程序。读取并处理完文件中的所有数据后,需要以输入模式处理文件FILE1,并清除文件FILE1。

但是,当我使用 QCMDEXE api 使用命令 CLRPFM 清除文件时,它会抛出文件正在使用中的错误。

我怎样才能克服这个问题并在程序结束时清除文件。任何建议都会很有帮助。

jma*_*phy 8

我可以想到几种方法。第一个也是我的偏好是使用嵌入式 SQL:

exec sql delete from file;
Run Code Online (Sandbox Code Playgroud)

如果没有人使用该文件,该命令足够智能,可以进行完全清除,但如果文件正在使用,它只会删除所有记录,并且无法获得清除所需的排它锁。

如果 SQL 无法解决,您可以使用 RPG 删除记录。成功处理后我会删除每条记录。假设您正在使用READREADE来读取记录,一个简单的DELETE方法就可以了。此方法的优点是仅删除成功处理的记录,并且如果出现导致崩溃等问题,您可以重新运行。无需担心重新处理记录。

如果您确实想要 CLRPFM,您可以尝试的另一件事是close在清除之前先对文件进行操作。