AS400 IT備忘録

AS400/IBMi 知ってるコマンドまとめと解説

投稿日:2019年3月14日 更新日:

備忘録です。追記していきますので書きかけです。

 

コマンドの一覧を表示する SLTCMD

SLTCMD CMD(*ALL)

これでコマンドの一覧が表示される。

だいたいDSPとかWRKとかCHKとかCRTとかの3文字で始まるので、こんな機能無いのかなと思う時、役割で調べることができる。

 

 

物理ファイルを指定して、そこから作られている論理ファイルの一覧(関連)を調べる DSPDBR

DSPDBR ライブラリ名/物理ファイル名

指定されたファイルに従属するファイルという名目で、複数の論理ファイルが表示される。

ちなみに論理ファイルを指定しても特段変わった情報は表示されない。

もちろんViewを指定しても論理ファイルと同様。むしろファイルタイプが論理になっている。

画面表示がデフォルトなので、このまま実行すればいい。

 

物理ファイルを指定して、その物理ファイルと関連する論理ファイルの、キーとレコード様式と表示する DSPKEY

DSPKEY ライブラリ名/物理ファイル名 *

正直ソースを見ればいいと思ったが、オブジェクトから参照できるので信頼性は高い。

ちなみに論理ファイルを指定すると一切表示されない。

最後の*は画面表示の意味。デフォルトは*PRINT。

 

物理ファイルを指定してフィールドの属性を調べる DSPFMT

DSPFMT ライブラリ名/物理ファイル名 *  ←こちらは罫線付で見やすいしカラムの詳細も見れる。オススメ。

DSPFFD ライブラリ名/物理ファイル名  ←DSPFMTと同じなので、使う必要なし。

出力されるのは、フィールド名・データタイプ(CHARとかZONEDとか)・フィールド長・バッファー長・バッファー長・フィールドの使用法・カラムの見出し。

見慣れないのはバッファ長とバッファ位置。バッファ長はフィールド長と同じ。バッファ位置は、ファイルレイアウトフォームやDSで切るときの、何桁目から何桁目のようなもの。

DSPFMTはデフォルトが*PRINT印刷なので、*を付けること。

 

RPGやCLやDDSなどのメンバー一覧を取得する DSPFD

要するにソースコードの一覧を取得できる。

QRPGSRCとかQCLSRCとかあると思うが、その中に入っているメンバーの一覧だ。どんな名前のソースコードがあるのか一覧で出力できる。

DSPFD FILE(調べたいライブラリ名/調べたいソースファイル名) TYPE(*MBRLIST) OUTPUT(*OUTFILE) OUTFILE(出力ライブラリ名/任意のファイル名)

OUTFILEでファイル出力ができる。出力したいライブラリを指定して、どういう名前で出力するか決める。

参考ソースは、

DSPFD FILE(CHECKLIB/QRPGSRC) TYPE(*MBRLIST) OUTPUT(*QPRINT) OUTFILE(MYLIB/QRPGSRCLIST)

 

出力できる情報は、

検索世紀・検索日・検索時刻・ファイルライブラリ・タイプ(PF/LF)・ファイル属性・未使用・ファイル属性・システム名・補助記憶域プール・未使用・メンバーの数・メンバー・現在のレコード数・削除済みレコード数・データ空間ND検索サイズ・S/38上でのS/38ビューのソース仕様タイプ・メンバー作成世紀・メンバー作成日・最終変更世紀・最終変更日付・最終変更時刻・テキスト記述ソース仕様タイプ・最終使用世紀・最終使用日付・使用日数カウント・使用状況データリセット世紀・使用状況データリセット日付・データ空間および索引サイズ・メンバー記憶域解放

使えそうなフィールドは赤字のところくらい。

 

CL内でオブジェクトの存在チェック CHKOBJ

コマンドでオブジェクトの存在チェックはDSPFDやDSPOBJD、プログラムならDSPPGMを使えばいいが、CLの中で存在するか確認してから処理したいとき。

CHKOBJ OBJ(ライブラリ名/ファイル名) OBJTYPE(オブジェクトの種類)

MONMSG MSGID(CPF9801) EXEC(CLコマンド)

存在しなければCPF9801のメッセージ標識が返されるので、そこにその場合の処理を書けばよい。

 

OS400のバージョンを調べる GO LICPGM

コマンドラインから、

  1. GO LICPGM
  2. 10導入済みライセンスプログラムの表示を選択
  3. F11キーでリリースのフィールドが表示される。
  4. IBM I導入済みリリースがOSのレベル。その他プログラムも同様。

「V7R1MO」のような文字列がバージョンのこと。
V=バージョン大幅な機能の改訂
R=リリース中位の機能の改訂
M=モディフィケーション少しの機能の改訂

 

CPFなどのメッセージ一覧を眺める WRKMSGF

メッセージとは主にCPF〇〇〇〇しか使わない感じだが、実際には死ぬほどある。

その一覧を照会するには、

WRKMSGF MSGF(*ALL)

で一覧照会できる。ただメッセージはメッセージファイルという中にあり、このコマンドでは、そのファイルの一覧が照会されるだけ。

そのCPFのメッセージは、QCPFMSGファイルにあるが、CPF以外にも膨大にあるので探すのは実に大変。

噂のSQLのメッセージもこの中にある。ファイルはQSQLMSG。SQL〇〇〇〇というよく聞くメッセージも含まれている。

というか、ここからメッセージを探しに行くことなんかあるのだろうか。

 

CPFなどのメッセージを番号指定で個別に調べる DSPMSGD

AS400の場合はCLやバッチでエラーをぶっこいてメッセージが表示されることはあっても、自分からエラー番号を指定してその内容を見たいということはあまりないだろうが、そんなコマンド。

DSPMSGD CPF〇〇〇〇

表示された画面で1を選んで実行キーを押せば、メッセージ内容が確認できる。

 

 

オブジェクトの一覧を画面表示したり、ファイルに出力する DSPOBJD

ライブラリにあるオブジェクトの一覧を表示するコマンド

 

DSPOBJD OBJ(HOGELIB/*ALL) OBJTYPE(*ALL) OUTPUT(*OUTFILE) OUTFILE(HOGELIB/OBJLST)

こんな感じ。HOGELIBの全てのオブジェクトの一覧を、HOGELIBのなかにOBJLSTというファイルで作成する。

ちなみに、OBJTYPEを(*QRYDFN)にすればQRY定義だけを絞って取り出すこともできる。

 

出力のデフォルトは画面出力なので、画面表示をしたいだけなら下記だけでOK。

DSPOBJD OBJ(HOGELIB/*ALL) OBJTYPE(*ALL)

 

出力できる情報は、

表示世紀・表示日付・表示時刻・ライブラリオブジェクトオブジェクトタイプ・オブジェクトの属性・記憶域解放・オブジェクトサイズ・テキスト記述・オブジェクトのロック・損傷オブジェクト・作成世紀・生成日付・作成時刻・オブジェクト所有者・保管世紀・保管日付・保管時刻・保管コマンド・保管されたサイズ・開始スロット・保管装置・保管ボリューム・継続ボリューム・復元世紀・復元日付・復元時刻・ソースファイル名・ソースファイルライブラリ・ソースファイルメンバ・ソース変更世紀・ソース変更日付・ソース変更時刻・コンパイラ名・コンパイラレベル・オブジェクトレベル・ユーザ変更・LICPGM名・LICPGMレベル・PTF番号・APARID・順序番号・変更世紀・変更日付・変更時刻・保管ファイル・保管ファイルのライブラリ・ASP番号・ファイルラベル・PTFID・システム名・作成ユーザー・作成したシステム・使用状況の更新・最終使用世紀・最終使用日付・使用日数カウント・リセット世紀・リセット時刻・オブジェクト定義域・システムバージョン・コンパイラバージョン・LICPGMバージョン・圧縮状況・オーバーフロー・API変更可能・APIによる変更・ユーザ定義の属性・保管活動世紀・保管活動日付・保管活動時刻・オブジェクト監査値・装置中のオブジェクトサイズ・装置あたりのバイト数・一次グループ・大順序番号・ディジタル署名・現在ジャーナル処理中・ジャーナル名・ジャーナルライブラリ・ジャーナルイメージ・除外ジャーナル項目・ジャーナル世紀・ジャーナル日付・ジャーナル時刻・保管サイズ単位数・保管サイズ乗数・オブジェクトASP番号・ライブラリASP番号・オブジェクトASP装置名・ライブラリASP装置名・トラステッドソースによる署名済・複数署名・関連スペースサイズ・最適スペース調整・オブジェクトASPグループ名・ライブラリASPグループ名・適用する開始ジャーナル・レシーバー名・開始ジャーナルレシーバーライブラリ・開始レシーバーライブラリASP装置・開始レシーバーライブラリASPグループ・リモートジャーナルフィルター

 

これだけ。見た感じプログラムで使えそうなデータは赤字の4つくらい。

ファイル名は指定できるけど、レコード様式はOLIDOBJDで決まっているみたい。

 

(ソース)ファイルの削除 DLTF

QRPGLESRCのRCDLENを短く作っていたせいか、ちゃんとしたQRPGLESRCからソースメンバーをコピーしようとしたら、短いから切るで!って怒られたので一旦ソースファイルを削除。そしてRPGLESRCのソースファイルを作成した。ちなみにCRTSRCPFでレコード長を指定しなかった場合はデフォルトの92になる。IGCDTA(*YES)を入れないとファイルに2バイト文字が入らない。必ず入れること。ちなみにRPGIVのソースファイル名はRPGLESRCが標準的な名前とテキストに書いてあった。私的にはRPGもRPGIVも一緒のソースファイルに入れて管理したいけど、そういうことならしょうがない。

DLTF FILE(ライブラリ名/QRPGLESRC)

CRTSRCPF FILE(ライブラリ名/QRPGLESRC) RCDLEN(112) IGCDTA(*YES) TEXT(‘MY QRPGLESRC’)

 

物理ファイルメンバーの再編成 RGZPFM

とあるログファイルを過去1年以前を削除するRPGを作って削除したのだが、DSPFDで見てみると見事に合計メンバーサイズが変わっていない。削除前と削除後で検証済。やはり再編成しなければいけないみたい。レコード数が37,998件でサイズが6,299,648あったのを、レコード数8,704まで削除したのに、サイズが変わらなかった。

RGZPFM FILE(ライブラリ/ファイル名)

ファイルが使用中でなければ大丈夫みたい。実行したらサイズが1,286,144まで減った。素晴らしい。ちなみに空のファイルに対して実行したらエラーになるらしい。もちろん残りのレコードは消えずにそのまま。CLRPFMと間違えたらえらいことだ。

 

メンバー除去 RMVM

STRPDMでメンバーを4の削除で消す行為と同じ。メンバーごと消える。

RMVM FILE(HOGELIB/QRPGSRC) MBR(HOGEHOGER)

 

メンバーのレコードを除去 CLRPFM

STRPDMでメンバーを4の削除で消すのとは違い、メンバー自体は残り、中のレコードが消える。

CLRPFM FILE(HOGELIB/QRPGSRC) MBR(HOGEHOGER)

 

ファイルのコピー CPYF

ファイルが存在していて CRTFILE(*YES)がない ⇒ 落ちない
ファイルが存在していて CRTFILE(*YES)がある ⇒ 落ちない
ファイルが存在せず CRTFILE(*YES)がない ⇒ 落ちる
ファイルが存在せず CRTFILE(*YES)がある ⇒ 落ちない

 

ストリング検索 FNDSTRPDM

いわゆるSTRPDMのオブジェクト処理からOPT25で行う検索のこと。これはコマンドでもできる。

 

F4を押してプロンプトで入力していった方が簡単だが、

FNDSTRPDM STRING(検索したい文字列) FILE(ライブラリ/ソースファイル) MBR(*ALL) OPTION(*DSP *NOPROMPT)

 

MBR(*ALL)にしておけば全ソースメンバーを対象に検索をかけることになる。

OPTION(*DSP)は表示する意味。OPTION(*EDT)にすれば編集可能画面で開いてくれる。

*NOPROMPTにしたら検索がヒットしたらそのソースコードをすぐ開くが、*PROMPTにすればSTRSEUのプロンプト画面を間に挟む。

 

これが便利に思ったのは印刷できること。

FNDSTRPDM STRING(検索したい文字列) FILE(ライブラリ/ソースファイル) MBR(*ALL) OPTION(*NONE *NOPROMPT) PRTMBRLIST(*YES)

にすれば、QPRINTかどこかに文字がヒットしたソースメンバー名を一覧で印刷してくれる。

いちいち手で控えていかなくてもいいので、とりあえず一覧化したい場合は、これはこれで便利。

 

OPTIONに*DLTとか*RNMとか*SAVEなど危険な臭いがするものもあるので、使用するときは注意したい。

ただ*SDAとか*RLUなどもあり、*PRTもあるので、色々できるのかも。

 

ちなみに*PRTにしたらヒットした各ソースメンバーが印刷された。ヒット件数が多かったらえらいことだ。

しかしPDMの2が編集、4が削除、5が表示、7が名前の変更、だというのは知っていたが、6が印刷だとは初めて知ったかも。

スポンサーリンク




スポンサーリンク




-AS400, IT備忘録

執筆者:


comment

Your email address will not be published. Required fields are marked *

関連記事

AS400/IBMi DTFで出来ること色々

自分用備忘録&書きかけです。   SELECT句に色々指定してみる。 今日は2019年03月07日   CURRENT DATE 19/03/07   YEAR(CURR …

WordPress Stinger8で固定ページにAdsense広告を表示する

なんでStringer8を使い出したんだろうか。もう経緯も忘れたが、Adsense広告も簡単に貼れるし、特に不自由はしていない。というかとても便利だ。   トップの画像がいまだにString …

FTPのバッチを作る

自分の備忘録です。間違ってるかもしれませんし大した内容ではありません。   バッチはテキストファイルにPUTやGETなどのコマンドを書いて、それを呼び出すバッチプログラムを拡張子を.batに …

AS400/IBMi 無料で Web化 GUI化 オープン化 PHP/Laravel設定編 1/2

注意 これは私の環境下における私の備忘録です。お使いの環境によっては内容が異なる場合があります。私は何も責任を負いませんのでご了承のうえご覧ください。   内容 Laravel設定編1/2と …

XAMPPのPHPでメール送信する

どこを調べてもPHPでメールを送るのは簡単だ。と、ドヤ顔でこんなソースを載せている。それは解ったんだけど、mb_send_mailが使えないんだよ。とブツブツ言いながら調べてphp.iniを直したりな …

Adsense広告


文字で検索

人気記事

なぜだか人気記事