是否可以使用 SQL 生成 iSeries 源文件中所有源成员的列表?
可能类似于从 SYSTABLES 和 SYSCOLUMNS 获取表定义,但到目前为止我找不到任何东西。
是否可以使用 SQL 生成 iSeries 源文件中所有源成员的列表?
可能类似于从 SYSTABLES 和 SYSCOLUMNS 获取表定义,但到目前为止我找不到任何东西。
自从提出其他答案以来,更多的表和视图已添加到系统目录中。现在,您可以获得给定文件(又名表)的成员列表(在 SQL 用语中也称为“分区”),如下所示:
SELECT TABLE_PARTITION FROM SYSPARTITIONSTAT
WHERE TABLE_NAME = myfile AND TABLE_SCHEMA = mylib
您还可以从中获取其他信息,SYSPARTITIONSTAT
例如每个成员中的行数,以及上次更改、保存、恢复或使用的时间戳。
遗憾的是,SQL 对成员一无所知,因此您可以从 qsys2.syscolumns 获得的所有源文件信息都是,它们由三列组成。
您需要成员信息,我建议将 qshell( STRQSH ) 与对 qsys2.systables 的查询一起使用,因为那里特别标记了源文件。
select table_schema , table_name from qsys2.systables where File_type = 'S'
我拼凑了一个 qshell one-liner 用于复制和粘贴目的..
db2 -S "select '/QSYS.LIB/' concat table_schema concat '.LIB/' concat table_name concat '.FILE' from qsys2.systables where File_type = 'S'" | grep '/' | xargs -n1 find >/home/myuser/myfile
它将找到的每个成员都通过管道传输到 IFS 目录 /home/myuser/myfile 你也可以指定一个 Sourcefile 成员。随时根据您的需要进行修改。
PS:它会为直接位于/QSYS.LIB 中的源文件引发错误,但我认为你无论如何都不想要这些。
小心!:)
您可以编写一个使用 DSPFD 命令检索成员列表的 CL 程序。也许您可以从存储过程中调用该程序?
刚用过,效果不错。
DSPFD FILE(Libname/Filename)
TYPE(*MBRLIST)
OUTPUT(*OUTFILE)
OUTFILE(QTEMP/MBRLIST)
然后在 SQL
SELECT MLNAME FROM MBRLIST
与@john-y 的回答类似,您还可以像这样获取源物理文件成员的列表:
SELECT SYSTEM_TABLE_MEMBER, SOURCE_TYPE FROM QSYS2/SYSPARTITIONSTAT WHERE
SYSTEM_TABLE_SCHEMA = 'MYLIB' AND SYSTEM_TABLE_NAME = 'QRPGLESRC'
基本上,对于库和源文件:
SELECT sys_dname, sys_tname
FROM qsys2/systables
ORDER BY sys_dname, sys_tname
然而,为了更详细,本讨论中概述了一个过程。
我需要它来查找特定源成员的位置,RPGLE 程序具有 /COPY #IFSIO_H,但它不符合哪个源文件。因此,我必须编写一个快速的 QSH 来在所有库中查找特定的源成员,从 QSYS.LIB 开始:这只有在成员中有字符串时才有效。
find '/QSYS.LIB/' -name '*.MBR' -exec grep -rins '#IFSIO_H' {} \;
需要时间,grep和find都提交到batch