以下のセクションでは、独立型 COBOL DB2 プリコンパイラーと統合 COBOL DB2 coprocessor の動作の相違を列挙します。
プリコンパイラー: DB2 プリコンパイラーでは、各 EXEC SQL INCLUDE ステートメントをピリオドで終了する必要がありません。 ピリオドが指定されていると、プリコンパイラーはそれをステートメントの一部として処理します。 ピリオドが指定されていないと、プリコンパイラーはあたかもピリオドが指定されているかのようにステートメントを受け入れます。
Coprocessor: DB2 coprocessor はそれぞれの EXEC SQL INCLUDE ステートメントを COPY ステートメントのように扱います。DB2 coprocessor では、ピリオドでステートメントが終了していることが必要です。以下に例を示します。
IF A = B THEN
EXEC SQL INCLUDE some_code_here END-EXEC.
ELSE
. . .
END-IF
IF ステートメントがピリオドで終了していないことに注意してください。
プリコンパイラー: DB2 プリコンパイラーでは、EXEC SQL INCLUDE ステートメントが、REPLACING 句を使用する COPY ステートメントを含むコピーブックを参照できます。
Coprocessor: DB2 coprocessor では、EXEC SQL INCLUDE ステートメントは、REPLACING 句を使用する COPY ステートメントを含むコピーブックを参照できません。 coprocessor は各 EXEC SQL INCLUDE ステートメントを COPY ステートメントと同様に処理します。ネストされた COPY ステートメントに REPLACING 句を指定することはできません。
プリコンパイラー: DB2 プリコンパイラーを使用して、COBOL REPLACE ステートメントおよび COPY ステートメントの REPLACING 句は、 EXEC SQL ステートメントで作成された拡張ソースに作用します。 REPLACE および REPLACING の COBOL 規則が使用されます。
コプロセッサー: DB2 コプロセッサーを使用して、REPLACE および COPY . . . REPLACING ステートメントは、EXEC SQL ステートメントなど、元のソース・プログラムに作用します。
次の例のように、異なる動作が起こる可能性があります。
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 で、区切り文字で区切られていないので、置換は行われません。
プリコンパイラー: DB2 プリコンパイラーは、同じ行で END-EXEC ステートメントより後にあるコードをすべて無視します。
Coprocessor: DB2 coprocessor は、同じ行で END-EXEC ステートメントより後にあるコードを処理します。
プリコンパイラー: DB2 プリコンパイラーでは、ホスト変数の参照が固有である必要はありません。 有効な DB2 データ・タイプに最初にマップした定義が使用されます。
Coprocessor: DB2 coprocessor では、各ホスト変数参照が固有でなければなりません。 coprocessor は、ホスト変数に対する固有でない参照を診断します。 ホスト変数参照を完全修飾して、それが固有なものとなるようにする必要があります。
プリコンパイラー: DB2 プリコンパイラーでは、EXEC SQL ステートメントの開始桁が 12 から 72 の間でなければなりません。 ステートメントの継続行は、8 から 72 桁目の間であればどこからでも開始できます。
Coprocessor: DB2 coprocessor では、継続行も含め EXEC SQL ステートメントのすべての行を 12 から 72 桁目の間にコーディングする必要があります。
プリコンパイラー: DB2 プリコンパイラーでは、COBOL の英数字データ項目を、サブタイプ FOR BIT DATA を持つ DB2 文字データを保持するホスト変数として使用することができます。 そのホスト変数を FOR BIT DATA として宣言する明示の EXEC SQL DECLARE VARIABLE ステートメントは必要ありません。
Coprocessor: DB2 coprocessor では、COBOL の英数字データ項目を、サブタイプ FOR BIT DATA を持つ DB2 文字データを保持するホスト変数として使用できますが、その場合は、COBOL プログラム内でそのホスト変数に対して明示の EXEC SQL DECLARE VARIABLE ステートメントが指定されていなければなりません。 以下に例を示します。
EXEC SQL DECLARE :HV1 VARIABLE FOR BIT DATA END-EXEC.
EXEC SQL DECLARE . . . FOR BIT DATA ステートメントを追加する代わりに、NOSQLCCSID コンパイラー・オプションを使用することもできます。 詳細については、下記のコード・ページ決定に関する関連参照を参照してください。
プリコンパイラー: DB2 プリコンパイラーでは、プログラムが複数回呼び出されたときに異なるアドレスに存在する可能性のあるホスト変数を渡す場合は、呼び出し先プログラムが SQL-INIT-FLAG をリセットする必要があります。 このフラグをリセットすることにより、次回に SQL ステートメントが実行されたとき、ストレージを初期化するよう DB2 に指示することができます。 このフラグをリセットするには、呼び出し先プログラムの PROCEDURE DIVISION にステートメント MOVE ZERO TO SQL-INIT-FLAG を挿入します。ただし、当該ホスト変数を使用する実行可能な SQL ステートメントより前に挿入する必要があります。
Coprocessor: DB2 coprocessor では、呼び出し先プログラムが SQL-INIT-FLAG をリセットする必要はありません。 プログラムの移植を容易にするため、プログラム内で SQL-INIT-FLAG が自動的に定義されます。 ただし、SQL-INIT-FLAG を変更するステートメント (MOVE ZERO TO SQL-INIT-FLAG など) は、プログラム内の SQL 処理に影響を及ぼしません。
関連概念
DB2 coprocessor