带有SQL的文件中的源成员列表

时间:2008-12-09 16:42:05

标签: sql ibm-midrange

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

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

7 个答案:

答案 0 :(得分:9)

自提出其他答案以来,系统目录中添加了更多表格和视图。现在,您可以获取给定文件(a.k.a.表)的成员列表(a.k.a。"分区"在SQL术语中),如下所示:

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

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

答案 1 :(得分:4)

遗憾的是,SQL对成员一无所知,所以你可以从qsys2.syscolumns获得的所有sourcefile-info都是由三列组成的。

你想要成员信息,我建议使用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中抛出Sourcefiles的错误,但我认为你还不想要那些..

小心! :)

答案 2 :(得分:2)

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

答案 3 :(得分:2)

刚刚使用它,它可以治疗。

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

然后在SQL

SELECT MLNAME FROM MBRLIST

答案 4 :(得分:0)

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

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

但是,有关详细信息,请在this discussion中概述了一个过程。

答案 5 :(得分:0)

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

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

需要时间,grep和find将提交给批处理

答案 6 :(得分:0)

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

SELECT SYSTEM_TABLE_MEMBER, SOURCE_TYPE FROM QSYS2/SYSPARTITIONSTAT WHERE
SYSTEM_TABLE_SCHEMA = 'MYLIB' AND SYSTEM_TABLE_NAME = 'QRPGLESRC'