如何获取AS400中使用指定物理文件(PF)的程序列表并输出到outfile?
获取AS400(IBM i)中使用特定物理文件的程序列表并输出到文件
在AS400(现称IBM i)系统中,有几种原生方法可以获取引用特定物理文件(PF)的程序列表,并且支持输出到文件中,以下是具体操作:
方法一:使用DSPPGMREF命令
这是系统自带的交互式命令,专门用于查询程序对对象的引用关系。
1. 交互式查看(输出到屏幕)
执行以下命令,替换LIB_NAME和PF_NAME为你的库名和物理文件名:
DSPPGMREF OBJ(LIB_NAME/PF_NAME) OBJTYPE(*FILE)
命令执行后,屏幕会列出所有直接引用该PF的程序,包括程序名、库名、程序类型等信息。
2. 输出到文件(Outfile)
如果需要将结果保存到物理文件中,添加OUTPUT(*OUTFILE)参数:
DSPPGMREF OBJ(LIB_NAME/PF_NAME) OBJTYPE(*FILE) OUTPUT(*OUTFILE) OUTFILE(OUTLIB/OUTFILE_NAME)
- 如果指定的输出文件不存在,系统会自动创建一个结构与
QSYS/QADSPPGM一致的物理文件。 - 可以通过
DSPFD FILE(OUTLIB/OUTFILE_NAME)查看输出文件的字段结构,关键字段包括PGMLIB(程序库)、PGMNAME(程序名)、PGMTYPE(程序类型)等。
方法二:使用SQL查询系统视图
IBM i提供了系统视图QSYS2.SYSPGMREFCST,存储了程序编译时的引用信息,适合通过SQL批量查询和导出。
1. 查询引用该PF的程序
执行以下SQL语句,替换对应的库名和PF名:
SELECT PROGRAM_LIBRARY, PROGRAM_NAME, PROGRAM_TYPE FROM QSYS2.SYSPGMREFCST WHERE REFERENCED_OBJECT_LIBRARY = 'LIB_NAME' AND REFERENCED_OBJECT_NAME = 'PF_NAME' AND REFERENCED_OBJECT_TYPE = '*FILE';
2. 将查询结果输出到文件
可以通过CREATE TABLE语句直接将结果保存到物理文件:
CREATE TABLE OUTLIB/OUTFILE_NAME AS ( SELECT PROGRAM_LIBRARY, PROGRAM_NAME, PROGRAM_TYPE FROM QSYS2.SYSPGMREFCST WHERE REFERENCED_OBJECT_LIBRARY = 'LIB_NAME' AND REFERENCED_OBJECT_NAME = 'PF_NAME' AND REFERENCED_OBJECT_TYPE = '*FILE' ) WITH DATA;
也可以使用EXPORT命令将SQL结果导出到不同格式的文件(如CSV),但上述方法直接生成物理文件更符合AS400的使用习惯。
注意事项
- 以上方法仅能捕获编译时静态引用的程序,如果程序通过动态方式(如
CALL命令动态指定文件、使用指针访问等)调用PF,这类引用不会被记录,无法通过上述方法查到。 - 执行命令或查询视图时,需要具备对应的对象访问权限(如对程序库、系统视图的读取权限)。
内容的提问来源于stack exchange,提问作者Kunal Roy
相关产品推荐
相关产品推荐

