Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 コンパイラーおよびランタイム 移行ガイド


コプロセッサーに移行するときの考慮事項

分離プリコンパイラーと組み込みコプロセッサーでは、SQL コードの特定 のアスペクトの処理方法に多少の違いがあります。コプロセッサーの使用に変更する場合、以下の項目を表示して、 これらの違いを考慮してください。
継続行
プリコンパイラー: EXEC SQL ステートメントは 12 から 72 桁目で始める必要があります。ステートメントの継続行は、8 から 72 桁目のどの位置からでも始めることができます。

コプロセッサー: EXEC SQL ステートメントのすべての行は、継続行も含め、12 から 72 桁目でコード化する必要があります。

コプロセッサーへのマイグレーションのための処置: 8 から 11 桁目で始まる EXEC SQL ステートメントの任意の継続行を 12 から 72 桁目で始まるように移動します。

SQL INCLUDE と使用する COPY REPLACING
プリコンパイラー: EXEC SQL INCLUDE ステートメントは、ネストされた COPY . . . REPLACING ステートメントを含むコピーブックを参照できます。

コプロセッサー: EXEC SQL INCLUDE ステートメントは、ネストされた COPY . . . REPLACING ステートメントを含むコピーブックを参照できません。これは、 EXEC SQL INCLUDE はコプロセッサーによって COPY と全く同様に処理され、ネストされた COPY ステートメントは REPLACING を使用することができないためです。

コプロセッサーへのマイグレーションのための処置: COPY REPLACING をコピーブックではなく、元の COBOL ソース・プログラムの中にのみ存在するようにご使用のコードを変更してください。

FOR BIT DATA ホスト変数
プリコンパイラー: COBOL 英数字データ項目を、サブタイプ FOR BIT DATA をもつ DB2 文字データを保持するためのホスト変数として使用できます。プリコンパイラーでは、問題のホスト変数を FOR BIT DATA として宣言する明示的な EXEC SQL DECLARE VARIABLE ステートメントは必要ありません。
コプロセッサー: COBOL 英数字データ項目は、以下の場合にのみ、サブタイプ FOR BIT DATA をもつ DB2 文字データを保持するためのホスト変数として使用できます。
  • NOSQLCCSID コンパイラー・オプションを指定したか、または、
  • ホスト変数用の明示的な EXEC SQL DECLARE VARIABLE ステートメントを COBOL プログラムに指定した。以下に例を示します。
    EXEC SQL DECLARE :HV1 VARIABLE FOR BIT DATA END-EXEC
テーブルの COBOL 宣言の生成に DB2 DCLGEN コマンドを使用する場合、EXEC SQL DECLARE ステートメントを自動的に作成できます。このためには、DCLGEN コマンドに DCLBIT(YES) オプションを指定します。
コプロセッサーへのマイグレーションのための処置:
  • DCLGEN を使用して、明示的な EXEC SQL DECLARE VARIABLE FOR BIT DATA ステートメントを、文字データとしてのみでなく、ビット・データとして使用される任意のデータ項目のデータ宣言に追加する。
  • 明示的な EXEC SQL DECLARE VARIABLE FOR BIT DATA ステートメントを手動でデータ宣言に追加する。
  • NOSQLCCSID コンパイラー・オプションを使用する。
ホスト変数の多重定義
プリコンパイラー: ホスト変数参照が固有である必要はあ りません。

有効な DB2 データ型にマップされる最初の定義が使用されます。

コプロセッサー: すべてのホスト変数参照は固有でなければなり ません。

ホスト変数参照が固有でない場合、コプロセッサーはそれを非固有参照と診断します。ユーザーは、そのホスト変数参照を固有に するために、それを完全に修飾しなければなりません。

コプロセッサーへのマイグレーションのための処置: 複数の定義が存在するホスト変数参照を完全修飾します。

EXEC SQL INCLUDE ステートメントの終わりのピリオド
プリコンパイラー: ピリオドは必要ありません。

ピリオドが指定されると、プリコンパイラーはそれをステートメントの一部として処 理します。 ピリオドが指定されないと、プリコンパイラーはそのステートメントをピリオドが指定さ れたかのように受け入れます。

コプロセッサー: ピリオドは必須です。(コプロセッサーは、EXEC SQL INCLUDE ステートメントを COPY ステートメントのように扱います。)

例:
IF A = B THEN
    EXEC SQL INCLUDE somecode END-EXEC.
ELSE
    ...
END-IF
IF ステートメントはピリオドで終わらないことに注意してください。
コプロセッサーへのマイグレーションのための処置:
EXEC SQL INCLUDE somecode END-EXEC
ステートメントの後にピリオドを追加してください。
REPLACE および EXEC SQL ステートメント
プリコンパイラー: COBOL REPLACE ステートメントと COPY ステートメントの REPLACING 句は EXEC SQL ステートメントから作成された拡張ソースに基づいて動作します。
コプロセッサー: COBOL REPLACE ステートメントと COPY ステートメントの REPLACING 句は EXEC ステートメントを含む元のソース・プログラムに基づいて動作します。その結果、以下のような例においては別の動作が発生することがあります。
REPLACE ==ABC ==By ==XYZ ==.
01 G.
02 ABC PIC X(10).
...
EXEC SQL SELECT *INTO :G.ABC FROM TABLE1 END-EXEC
プリコンパイラーでは、G.ABC への参照は拡張ソース内で ABC OF G として表示されますが、 XYZ OF G に置き換えられます。コプロセッサーでは、 ABC が元のソース・ストリング G.ABC において区切り文字によって区切られないために、置き換えは発生しません。
コプロセッサーへのマイグレーションのための処置: 以下のようにご使用のコードを変更して、非修飾参照だけでなく修飾参照 (例えば G.ABC) も置き換えます。
REPLACE ==ABC ==By ==XYZ ==
==G.ABC ==By ==G.XYZ ==.
または、修飾が不要になるようにコードを変更するか、そのようなデータ項目に対して REPLACE の使用を止めるか、 REPLACE によって変更される COBOL プログラムがきれいにコンパイルされるようにその他の方法を実行します。
END-EXEC に続くソース・コード
プリコンパイラー: 同じ行の END-EXEC に続くコード を無視します。

コプロセッサー: 同じ行の END-EXEC に続くコードを処理します。

コプロセッサーへのマイグレーションのための処置: 同じ行の END-EXEC に続くコードまたはコメントをすべて除去します。

SQL-INIT-FLAG
プリコンパイラー: プログラムが複数回呼び出される際に、異なるアドレスにある可能性のあるホスト変数を渡す場合、呼び出し先プログラムが SQL-INIT-FLAG をリセットする必要があります。このフラグをリセットするということは、次の SQL ステートメントの実行時に、ストレージの初期設定が必要であることを DB2 に指示することを意味します。このフラグをリセットするには、呼び出し先プログラムの PROCEDURE DIVISION で、ホスト変数を使用するすべての実行可能な SQL ステートメントより前に、ステートメント MOVE ZERO TO SQL-INIT-FLAG を挿入します。

コプロセッサー: 呼び出し先プログラムは、SQL-INIT-FLAG をリセットする必要はありません。プログラムの移植性を高めるために、SQL-INIT-FLAG がプログラム内に自動的に定義されます。ただし、MOVE ZERO TO SQL-INIT-FLAG など、SQL-INIT-FLAG を変更するステートメントは、プログラムでの SQL 処理には何の影響もありません。

コプロセッサーへのマイグレーションのための処置: オプションで、 SQL-INIT-FLAG への参照を除去します。この参照は使用しないため不要です。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)