Можно ли с помощью SQL создать список всех элементов-источников в исходном файле iSeries?
Это может быть похоже на получение определений таблиц из SYSTABLES и SYSCOLUMNS, но я пока ничего не могу найти.


Вы можете написать программу на CL, которая извлекает список членов с помощью команды DSPFD. Возможно, вы сможете вызвать эту программу из хранимой процедуры?
К сожалению, SQL ничего не знает о членах, поэтому вся информация об исходных файлах, которую вы можете получить из qsys2.syscolumns, состоит в том, что они состоят из трех столбцов.
вам нужна информация об участнике, и я предлагаю использовать 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, вы также можете указать член исходного файла. не стесняйтесь изменять в соответствии с вашими потребностями.
PS: он выдает ошибки для исходных файлов, находящихся непосредственно в /QSYS.LIB, но я думаю, что они вам все равно не нужны ..
заботиться! :)
В основном, только для библиотеки и исходного файла:
SELECT sys_dname, sys_tname
FROM qsys2/systables
ORDER BY sys_dname, sys_tname
Однако для более подробной информации процедура описана в это обсуждение.
@chappjc Просто для подтверждения - ваше изменение заключалось в форматировании операторов SQL в блоке кода и преобразовании явного URL-адреса обсуждения в гиперссылку под текстом «это обсуждение»? Приношу свои извинения за чистку форматирования.
да. См. исправления для просмотра изменений.
Несколько более сложная процедура описана в Возможности пользовательских табличных функций. См. Раздел, описывающий UDTF ListMember_Fnc.
Просто использовал это, это работает.
DSPFD FILE(Libname/Filename)
TYPE(*MBRLIST)
OUTPUT(*OUTFILE)
OUTFILE(QTEMP/MBRLIST)
затем в SQL
SELECT MLNAME FROM MBRLIST
После представления других ответов в системный каталог было добавлено больше таблиц и представлений. Теперь вы можете получить список членов (также называемых «разделами» на языке SQL) для данного файла (он же таблица) следующим образом:
SELECT TABLE_PARTITION FROM SYSPARTITIONSTAT
WHERE TABLE_NAME = myfile AND TABLE_SCHEMA = mylib
Вы также можете получить другую информацию из SYSPARTITIONSTAT, такую как количество строк в каждом элементе и отметки времени для последнего изменения, сохранения, восстановления или использования.
Это информация, которую я искал сегодня. Спасибо.
Мне нужно, чтобы найти, где находится конкретный исходный элемент, программа RPGLE имеет / COPY #IFSIO_H, но не определяет, из какого исходного файла. Поэтому мне пришлось написать быстрый QSH, чтобы найти конкретный элемент-источник во всех библиотеках, начиная с QSYS.LIB: Это работает, только если в элементе есть строка.
find '/QSYS.LIB/' -name '*.MBR' -exec grep -rins '#IFSIO_H' {} \;
Требуется время, grep и find отправляются в пакетную обработку
Подобно ответу @ john-y, вы также можете получить список членов исходного физического файла следующим образом:
SELECT SYSTEM_TABLE_MEMBER, SOURCE_TYPE FROM QSYS2/SYSPARTITIONSTAT WHERE
SYSTEM_TABLE_SCHEMA = 'MYLIB' AND SYSTEM_TABLE_NAME = 'QRPGLESRC'
Если вы не получили здесь ответа, попробуйте спросить на Список рассылки MIDRANGE-L.