はじめに
メモ書き記事です。
QSYSOPRで「レコード件数が閾値に達している」とエラーメッセージが表示され、「物理ファイルのテーブル行数値について上手いハンドリングはないか」とご質問をいただきました。
そもそもIBM i の上限値というものが存在するとのことです。上限値行くことなんてあるんだ、とびっくり。歴史あるシステムだからですね。
上限値について噛み砕いたわかりやすい記事
調べる方法
ACS
ACSのスキーマ機能を使って調べます。
対象ライブラリー配下(SAKURALIB)の表を選択すると、ライブラリ配下の物理ファイル一覧が並びます。一番右の行カウント列が物理ファイルのテーブル行数値です。
右上の真ん中のアイコンから列に表示する項目のカスタマイズができます。そこで行カウントを選択すると行数表示が出ます。
SQL
SYSTABLESTATビューを利用しました。
SELECT
TABLE_NAME,
NUMBER_ROWS
FROM
QSYS2.SYSTABLESTAT
WHERE
TABLE_SCHEMA = 'SAKURALIB'; -- 対象のスキーマ名を指定
CL
DSPFD FILE(*ALL/*ALL) TYPE(*MBR) OUTPUT(*OUTFILE) FILEATR(*PF) OUTFILE(SAKURALIB/DSPFD)
OUTFILE出力にしないとQPDSPFDが最大レコード数に達したとのことで表示できません。
またCLですとFILE(*ALL/*ALL)
でライブラリー全件に対して一気に検索をかけられます。