IBM i サービスの別な探し方：QSYS2, SYSTOOLライブラリーのプロシージャー検索で

***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が表示されないと思いますので、***ツリー上の "スキーマ"を選択 → 右クリック → 組込み を選択します***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/0448260d-b0a5-50d5-9184-96d603c0e513.png)

最上部の ""スキーマ名の入力" に "SYSTOOLS" と入力してもいいですし、
"スキーマの検索" に "SYST*" のように入力して検索し、結果から SYSTOOL を選択してもかまいません。下図はその状態です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/80711da5-c918-a66b-7da1-a8c718f9995c.png)

ここで 追加 ボタンを押すと右側の選択されたスキーマ一覧に追加されます。
同様にして、QSYS2も追加します。

### SYSTOOLライブラリーを確認してみる

QSYS2ライブラリーを展開すると、146個のプロシージャーが見つかりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/f7aa9ccd-3173-06db-2579-7110eb102a1a.png)

SYSTOOLSライブラリーには8つです。
※ただし、この後確認したらSYSTOOLSで実行時エラーのでるプロシージャーもありました、バグ？その他？後ほど確認したいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/0abb8159-09b0-9e24-2f4e-40a9e317a15b.png)

"名前"がSQLプロシージャー名、"特定の名前"と"プログラム"がIBM i OS上の実際のオブジェクト名（とライブラリー名）です。

これならIBM i サービスの一覧としても使えそうです。

### みつけた、 IFS_WRITEプロシージャーを実行してみる

せっかくなので目についたプロシージャーを実行してみます。

下記の***IFS_WRITEプロシージャー***が目につきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/530b595c-1cb9-8697-eba6-91c06f9536f5.png)

素、バイナリー、ユニコードがあるようです。素のプロシージャーを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は置き換えなど。改行コードも指定できるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/b388f968-d4f4-9ce3-4a41-695d7b32bcdc.png)

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 */
);
```
IFSファイルが生成され、、
中身は、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/62c8a616-1ca0-04ef-40fa-cae147900bb7.png)

ファイル属性は、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/ea9ebb17-2a51-18a1-a147-a6128217e757.png)

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 */
);
```

実行時サンプルがこちらです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/7777a1b5-b5f9-2b66-ecdb-21268adb0cb1.png)
```
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 */
);
```

実行結果は、、（2回実行後）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/bf7ae3b6-90e1-dd86-70e6-4542a646b46e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/84b810aa-dd82-daab-1fc4-05ec624065f1.png)

OKなようです。