IBM i サービス(IBM i ,Db2 for i の運用・操作をSQLで実行するインターフェース)の数は半年ほど前に調べた際は300ちょっとでしたが、つい最近調べた際は350でした。
※上記の数は、以下の記事で紹介するプロシージャー以外にテーブル、テーブル関数等も含めた合計数です。
私がQiitaで紹介できたその数は10にもなりません^^; ということで全てを把握するのはネ申の領域になってしまいますので、普通は ACS SQLスクリプト実行の例から挿入から探すことになると思います。
・・・が、それではまだるっこしい皆様にちょっとかんたんになる?かもしれないIBM i サービスの探し方をご紹介します。
IBM i サービスの実体はQSYS2 と SYSTOOLSライブラリーに格納されている
QSYS2,SYSTOOLライブラリーともすぐ実行可能なプロシージャーが収められています。
QSYS2, SYSTOOLSライブラリーのプロシージャーを表示してみる
もちろん5250で WRKLIB ・・・でもいいのですが^^;
ここではふつうにACS → データベース → スキーマを開きます
デフォルトだとSYSTOOLSが表示されないと思いますので、ツリー上の "スキーマ"を選択 → 右クリック → 組込み を選択します
最上部の ""スキーマ名の入力" に "SYSTOOLS" と入力してもいいですし、
"スキーマの検索" に "SYST*" のように入力して検索し、結果から SYSTOOL を選択してもかまいません。下図はその状態です。
ここで 追加 ボタンを押すと右側の選択されたスキーマ一覧に追加されます。
同様にして、QSYS2も追加します。
SYSTOOLライブラリーを確認してみる
QSYS2ライブラリーを展開すると、146個のプロシージャーが見つかりました。
SYSTOOLSライブラリーには8つです。
※ただし、この後確認したらSYSTOOLSで実行時エラーのでるプロシージャーもありました、バグ?その他?後ほど確認したいと思います。
"名前"がSQLプロシージャー名、"特定の名前"と"プログラム"がIBM i OS上の実際のオブジェクト名(とライブラリー名)です。
これならIBM i サービスの一覧としても使えそうです。
みつけた、 IFS_WRITEプロシージャーを実行してみる
せっかくなので目についたプロシージャーを実行してみます。
下記のIFS_WRITEプロシージャーが目につきました。
素、バイナリー、ユニコードがあるようです。素のプロシージャーをSQLスクリプトの実行画面で開いてみると、下記のテンプレが表示されました。
CALL QSYS2.IFS_WRITE(
PATH_NAME => ?, /* IN DBCLOB(16 MB) pathname - Default: none */
LINE => ?, /* IN CLOB(2 GB) string - Default: none */
FILE_CCSID => 0, /* IN INTEGER number - Default: 0 */
OVERWRITE => 'APPEND', /* IN VARCHAR(7) APPEND, NONE, REPLACE - Default: APPEND */
END_OF_LINE => 'CRLF' /* IN VARCHAR(4) ANY, CR, CRLF, LF, LFCR, NONE - Default: CRLF */
);
下記のようにIFSパス・ファイル名、書き込みする文字列、IFSファイルのCCSIDを指定できます。
また、APPENDだと行を追加、RPLACEは置き換えなど。改行コードも指定できるようです。
fyi.で実行コード例も貼り付けます
CALL QSYS2.IFS_WRITE(
PATH_NAME => '/home/GOMA/Hello_939.txt', /* IN DBCLOB(16 MB) pathname - Default: none */
LINE => 'Hello World!', /* IN CLOB(2 GB) string - Default: none */
FILE_CCSID => 939, /* IN INTEGER number - Default: 0 */
OVERWRITE => 'APPEND', /* IN VARCHAR(7) APPEND, NONE, REPLACE - Default: APPEND */
END_OF_LINE => 'CRLF' /* IN VARCHAR(4) ANY, CR, CRLF, LF, LFCR, NONE - Default: CRLF */
);
OKのようです。
画面は記載しませんが、CCSIDを5035等にしても生成できました。
IFS_WRITE_UTF8プロシージャー も実行してみる
生成されたスケルトンがこちら
CALL QSYS2.IFS_WRITE_UTF8(
PATH_NAME => ?, /* IN DBCLOB(16 MB) pathname - Default: none */
LINE => ?, /* IN CLOB(2 GB) string - Default: none */
FILE_CCSID => 1208, /* IN INTEGER number - Default: 1208 */
OVERWRITE => 'APPEND', /* IN VARCHAR(7) APPEND, NONE, REPLACE - Default: APPEND */
END_OF_LINE => 'CRLF' /* IN VARCHAR(4) ANY, CR, CRLF, LF, LFCR, NONE - Default: CRLF */
);
CALL QSYS2.IFS_WRITE_UTF8(
PATH_NAME => '/home/GOMA/Hello_UTF8.txt', /* IN DBCLOB(16 MB) pathname - Default: none */
LINE => 'Hello World!', /* IN CLOB(2 GB) string - Default: none */
FILE_CCSID => 1208, /* IN INTEGER number - Default: 1208 */
OVERWRITE => 'APPEND', /* IN VARCHAR(7) APPEND, NONE, REPLACE - Default: APPEND */
END_OF_LINE => 'CRLF' /* IN VARCHAR(4) ANY, CR, CRLF, LF, LFCR, NONE - Default: CRLF */
);
OKなようです。