PL/I SQL プリプロセッサーを使用すると、組み込み SQL ステートメントを 含むソース・プログラムはコンパイル時に PL/I コンパイラーによって処理 され、ユーザーは別個のプリコンパイル・ステップを使用する必要がありません。 別個のプリコンパイル・ステップの使用も引き続きサポートされますが、PL/I SQL プリプロセッサーを 使用することをお勧めします。PL/I SQL プリプロセッサーを使用すると、デバッグ中に SQL ステートメント だけが表示されるように (生成された PL/I ソースは表示されない)、 デバッグ・ツールによる対話式デバッグが強化されています。 ただし、SQL プリプロセッサーを使用するには、DB2 for z/OS バージョン 7 リリース 1 以降が必要です。
さらに、PL/I SQL プリプロセッサーを使用すると、SQL プログラムに 対する DB2 プリコンパイラーの制限が一部解消されます。PL/I SQL プリプロセッサーを使用して SQL ステートメントを処理すると、 次のことが可能になります。
PL/I SQL プリプロセッサー・オプションを使用してコンパイルを行うと、 オブジェクト・モジュールやリストなど通常の PL/I コンパイラー 出力とともに、DB2 データベース要求モジュール (DBRM) が生成されます。DB2 バインド・プロセスへの入力になる DBRM データ・セットには、 プログラム内の SQL ステートメントとホスト変数に関する情報が入っています。 ただし、バインドまたは実行時の処理の場合、DBRM の中のすべての情報 が重要であるというわけではありません。 例えば、DBRM の中の HOST 値は、PL/I 以外の言語 を指定するものであり、気にする理由は何もありません。 この値は、HOST 値に対するインストール・デフォルトとして他の言語が選択される ことを意味するだけであって、PL/I のプログラムのバインドまたは実行時の処理には 影響しません。
PL/I コンパイラー・リストには、PL/I SQL プリプロセッサー が生成したエラー診断情報 (SQL ステートメントの構文エラーなど) が含まれています。
PL/I SQL プリプロセッサーを使用するには、次のことを行う 必要があります。
PP(SQL('options'))
このコンパイラー・オプションは、組み込み PL/I SQL プリプロセッサーを 起動するようにコンパイラーに指示します。SQL キーワードの後に、SQL 処理オプションのリストを括弧で囲んで指定します。 これらのオプションはコンマまたはスペースで区切ることができ、オプションのリストは引用符 で囲む必要があります (単一引用符か二重引用符を使用し、同じ種類の引用符で囲む必要があります)。
例えば PP(SQL('DATE(USA),TIME(USA)')) は、 DATE および TIME の両データ・タイプに対して USA フォーマットを使用するように プリプロセッサーに指示します。
また、LOB サポートを使用するには次のオプションを指定する必要があります。
LIMITS( FIXEDBIN(31,63) FIXEDDEC(31) )
PL/I SQL プリプロセッサーは、SQL ステートメントの処理を行うため に DB2 モジュールを呼び出します。 このため、DB2 ロード・ライブラリーのデータ・セット名を、 コンパイル・ステップ用の STEPLIB 連結に組み込む必要があります。
ソース・プログラムへの 2 次入力を指定する SQL INCLUDE member-name ステートメント がプログラムにある場合は、member-name を含むデータ・セットの名前を、 コンパイル・ステップ用の SYSLIB 連結に組み込む必要があります。
PL/I プログラムをコンパイルすると、DB2 データベース要求モジュール (DBRM) が 生成されるので、DBRM を書き込む先のデータ・セットを指定するために、DBRMLIB DD ステートメントが必要です。
//STEPLIB DD DSN=DSN710.SDSNLOAD,DISP=SHR //SYSLIB DD DSN=PAYROLL.MONTHLY.INCLUDE,DISP=SHR //DBRMLIB DD DSN=PAYROLL.MONTHLY.DBRMLIB.DATA(MASTER),DISP=SHR