Список исходных элементов в файле с SQL - PullRequest
9 голосов
/ 09 декабря 2008

Можно ли создать список всех исходных элементов в исходном файле iSeries с использованием SQL?

Может быть похоже на получение определений таблиц из SYSTABLES и SYSCOLUMNS, но я пока ничего не могу найти.

Ответы [ 7 ]

9 голосов
/ 21 января 2016

Дополнительные таблицы и представления были добавлены в системный каталог с момента представления других ответов. Теперь вы можете получить список членов (a.k.a. «разделы» на языке SQL) для данного файла (a.k.a. table) следующим образом:

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

Вы также можете получить другую информацию из SYSPARTITIONSTAT, такую ​​как количество строк в каждом элементе и метки времени последнего изменения, сохранения, восстановления или использования.

4 голосов
/ 12 декабря 2008

К сожалению, SQL ничего не знает о членах, поэтому вся информация о sourcefile, которую вы можете получить из столбцов qsys2.sys, состоит в том, что они состоят из трех столбцов.

вам нужна информация об участнике, и я предлагаю использовать qshell (STRQSH) вместе с запросом к qsys2.systables, поскольку там специально отмечены исходные файлы.

select table_schema , table_name from qsys2.systables where File_type = 'S'

я собрал однострочник qshell для копирования и вставки ..

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, но я думаю, что вы все равно их не хотите ..

Береги себя! :)

2 голосов
/ 19 февраля 2015

Только что использовал это, это работает удовольствие.

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

затем в SQL

SELECT MLNAME FROM MBRLIST
2 голосов
/ 10 декабря 2008

Вы можете написать программу CL, которая получает список участников, используя команду DSPFD. Возможно, вы можете вызвать эту программу из хранимой процедуры?

0 голосов
/ 07 декабря 2018

Подобно ответу @ john-y, вы также можете получить список исходных физических членов файла, например:

SELECT SYSTEM_TABLE_MEMBER, SOURCE_TYPE FROM QSYS2/SYSPARTITIONSTAT WHERE
SYSTEM_TABLE_SCHEMA = 'MYLIB' AND SYSTEM_TABLE_NAME = 'QRPGLESRC'
0 голосов
/ 08 февраля 2017

Мне нужно, чтобы найти, где находится конкретный исходный элемент, программа RPGLE имеет / COPY #IFSIO_H, но не указана, из какого исходного файла. Поэтому мне пришлось написать быстрый QSH, чтобы найти конкретный элемент-источник во всех библиотеках, начиная с QSYS.LIB: Это работает, только если внутри элемента есть строка.

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

Требуется время, grep и находка отправляются в пакет

0 голосов
/ 03 апреля 2014

В основном, только для библиотеки и исходного файла:

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

Однако, более подробно, процедура изложена в этом обсуждении .

...