8.2.9 COBOL言語で複数接続機能を使用する場合の注意事項
COBOL言語で複数接続機能を使用する場合,次のSQL文のSQL終了子(END-EXEC)の後ろに終止符(.)を付けても,ポストソース中に生成したCOBOLの文の後ろに終止符が付かないことがあります。このとき,SQLは完結文になりません。
-
DECLARE CONNECTION HANDLE SET
-
ALLOCATE CONNECTION HANDLE
-
FREE CONNECTION HANDLE
-
GET CONNECTION HANDLE
この問題を回避するために,プリプロセスのオプションに/Xmオプション(UNIX版の場合は-Xmオプション)を指定します。/Xmオプションを指定すると,プリプロセス後のポストソースから終止符が削除されなくなります。
/Xmオプション指定とポストソースの終止符の有無を次の表に示します。
SQL |
UAPソース中の終止符 |
/Xmオプション指定 |
ポストソース中の終止符 |
---|---|---|---|
|
あり |
あり |
終止符を付けます。 |
なし |
終止符を付けません。 |
||
なし |
− |
終止符を付けません。 |
|
|
− |
− |
左記のSQL文の位置にはCOBOLの文を生成しないため,終止符はありません。 |
COPY※1 |
−※2 |
あり |
ポストソース中に生成するCOBOLの文は,COPYで引き込んだ登録集原文の内容をUAPソース中に直接記述した場合と同じ内容となります。 |
なし |
|||
上記以外のSQL |
あり |
− |
終止符を付けます。 |
なし |
− |
終止符を付けません。 |
- (凡例)
-
−:終止符,又は/Xmオプション指定の有無はポストソースに影響しません。
- 注※1
-
COPYで引き込む登録集原文の中にはCOBOLの文とCOPY以外のSQLが記述されています。
- 注※2
-
COPYのSQL終了子の後ろの終止符の有無はポストソースに影響しません。
- 〈この項の構成〉
(1) /Xmオプション指定時の注意事項
次に該当する場合,/Xmオプションを指定することで,それまで正常に動作していたUAPがエラーになることがあります。次のようにSQL文を記述しているとエラーになります。
-
文法上完結文を記述できない場所に終止符を付けたSQL文を記述している場合
-
終止符の有無によってプログラムの動作が変わる場所にSQL文を記述している場合
(a) 文法上完結文を記述できない場所に終止符を付けたSQL文を記述している場合
例えば,END-IF,END-EVALUATEなどの明示範囲終了子で終了させた範囲内には,文法上完結文を記述できません。この場合,SQL文に誤って終止符を付けていても,/Xmオプションを指定しないでプリプロセスすると終止符が削除されるため,エラーにはなりません。しかし,/Xmオプションを指定すると,終止符が削除されないため,ポストソースのコンパイルでエラーとなります。
文法上完結文を記述できない場所に終止符を付けたSQL文を記述している場合の例を次に示します。
/Xmオプションを指定する場合は,文法上完結文を記述できない場所に終止符を付けたSQL文を記述しないようにUAPを修正してください。
(b) 終止符の有無によってプログラムの動作が変わる場所にSQL文を記述している場合
例えば,END-IF,END-EVALUATEなどの範囲終了子で終了させていない条件文でも,文末に終止符を付けることで暗黙的に終了します。そのため,終止符の有無によってプログラムの動作が変わることになります。この場合,条件文のSQL文に誤って終止符を付けていても,/Xmオプションを指定しないでプリプロセスすると終止符が削除され,意図していた動作をします。しかし,/Xmオプションを指定するとプログラムの内容が変わるため,意図していない動作をしてしまいます。
終止符の有無によってプログラムの動作が変わる場所にSQL文を記述している場合の例を次に示します。
/Xmオプションを指定する場合は,条件文のSQL文に終止符を付けないようにUAPを修正してください。