9

是否可以使用 SQL 生成 iSeries 源文件中所有源成员的列表?

可能类似于从 SYSTABLES 和 SYSCOLUMNS 获取表定义,但到目前为止我找不到任何东西。

4

7 回答 7

10

自从提出其他答案以来,更多的表和视图已添加到系统目录中。现在,您可以获得给定文件(又名表)的成员列表(在 SQL 用语中也称为“分区”),如下所示:

SELECT TABLE_PARTITION FROM SYSPARTITIONSTAT
WHERE TABLE_NAME = myfile AND TABLE_SCHEMA = mylib

您还可以从中获取其他信息,SYSPARTITIONSTAT例如每个成员中的行数,以及上次更改、保存、恢复或使用的时间戳。

于 2016-01-21T18:37:45.373 回答
5

遗憾的是,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 中的源文件引发错误,但我认为你无论如何都不想要这些。

小心!:)

于 2008-12-12T11:56:49.137 回答
2

您可以编写一个使用 DSPFD 命令检索成员列表的 CL 程序。也许您可以从存储过程中调用该程序?

于 2008-12-10T08:48:44.690 回答
2

刚用过,效果不错。

DSPFD FILE(Libname/Filename)
      TYPE(*MBRLIST)         
      OUTPUT(*OUTFILE)       
      OUTFILE(QTEMP/MBRLIST)

然后在 SQL

SELECT MLNAME FROM MBRLIST
于 2015-02-19T13:12:39.763 回答
1

与@john-y 的回答类似,您还可以像这样获取源物理文件成员的列表:

SELECT SYSTEM_TABLE_MEMBER, SOURCE_TYPE FROM QSYS2/SYSPARTITIONSTAT WHERE
SYSTEM_TABLE_SCHEMA = 'MYLIB' AND SYSTEM_TABLE_NAME = 'QRPGLESRC'
于 2018-12-07T20:57:43.410 回答
0

基本上,对于库和源文件:

SELECT sys_dname, sys_tname    
FROM qsys2/systables         
ORDER BY sys_dname, sys_tname

然而,为了更详细,本讨论中概述了一个过程。

于 2014-04-02T20:50:53.247 回答
0

我需要它来查找特定源成员的位置,RPGLE 程序具有 /COPY #IFSIO_H,但它不符合哪个源文件。因此,我必须编写一个快速的 QSH 来在所有库中查找特定的源成员,从 QSYS.LIB 开始:这只有在成员中有字符串时才有效。

find '/QSYS.LIB/' -name '*.MBR' -exec  grep -rins  '#IFSIO_H'  {} \; 

需要时间,grep和find都提交到batch

于 2017-02-08T01:53:59.483 回答