SYSINデータセットとは

出力のSYSOUTに対して、入力データセットとなるのがSYSINです。正確には「(JCL)ストリーム内データセット」と言い、SYSOUTのOUTに対するINであることや、OSのユーティリティーの多くがそのDD名にSYSINを使用することから、SYSINデータセットと呼ばれます。JCLのDDステートメントにDSNパラメーターの代わりに「*」を指定することで、次の行からJCLステートメントではなく、プログラムへ渡す入力データを記述することができます。SYSINデータはユーティリティーやアプリケーションプログラムの機能コマンドや制御パラメーターとして非常によく利用されています。

SYSINデータ(ストリーム内データセット)は、「*」を定義したDDステートメントの次の行から書き始めます。書き出し位置(開始桁)や構文、内容はまったくの自由で、入力するプログラムの仕様で決まります。この例ではAMSユーティリティーのDEFINE CLUSTERコマンドを記述しています。

SYSINデータはJCLと同じ80バイトの固定長レコードのデータです。80を超える長いレコード長も取り扱えますが、あまり一般的ではないと思われます。

SYSINデータの終わりは、/*ステートメントまたは別のJCLステートメント(//)によって示します。

別のジョブのJCLそのものをSYSINデータとして記述したい場合があります。この場合は、DDステートメントに「*」ではなく「DATA」パラメーターを定義します。

/*ステートメントそのものもSYSINデータとして記述したい場合は、DLMパラメーターで区切り文字を指定します。

SYSINからのデータ入力

COBOLにせよアセンブラーにせよ、SYSIN(ストリーム内データセット)を読み込むには固定長レコードの順次データセットとして読み込みを行えばいいのです。SYSOUT同様にプログラム自身ではSYSINから読むとかDISKのデータセットから読むとかの意識は基本的にしません。
実際のデータセットから読むか、JES2のスプールから読むかはJCLで決まります。JCLの定義を変えれば、プログラムをいじらなくても運用でデータの読み込み元を自由に変えることができます。
なお、COBOLプログラムの場合、DD名をSYSINとすればACCEPT文を書くだけでファイルアクセスよりも簡単に読み込み処理ができます。「COBOLでSYSINをアクセスする」

プロシージャーでのストリーム内データセット定義

プログラムの実行にとても便利なストリーム内データセットの機能ですが、残念ながらプロシージャー内には定義できません。プロシージャー内ではSYSIN(ストリーム内データセット)を直接定義することはできないので、そのプロシージャーを呼び出す時にDDステートメントの追加または置き換えの形で定義します。

2020年9月追記
※z/OS V1R13からは、SYSINデータ(ストリーム内データセット)をプロシージャー内に直接定義できるようになりました。さらにz/OS V2R1からは、SYSINデータ(ストリーム内データセット)内のデータそのものに対しても記号パラメーターによるデータの置換ができるようになっています。(参考「プロシージャー内のSYSINデータを記号パラメーターで変更する」