OS/390 版
言語環境プログラム
バージョン 2 リリース 9 以前から z/OS 版
言語環境プログラムに移行する場合は、RECORDING MODE U を指定した RECFM=VB または FB データ・セットを処理する COBOL プログラムの動作が変わる場合があります。
以下のケースにおいて、アプリケーション・プログラムが正しく作動するために、
多少の変更を必要とすることがあります。
- アプリケーション・プログラムが RECFM=VB または FB データ・セットを
RECORDING MODE U として読み取り、ブロック全体ではなく個々のレコードを
受け取る必要がある場合。
- アプリケーション・プログラムが RECORDING MODE U と定義された
RECFM=VB データ・セットへ書き込み、ブロックごとに複数のレコードを
書き込む必要がある場合。
OS/390 版言語環境プログラム バージョン 2 リリース 9 以前では、この組み合わせで RECORDING MODE と RECFM を使用すると、不一致が起こる場合があり、この動作は、一部のアプリケーションで利用されていました。CMPR2 を指定してコンパイルされたプログラムではこの問題はありませんが、PQ49479 の PTF がインストールされていない場合は、矛盾した動作が見られることがあります。
アプリケーションにこの問題が存在するかどうかを判別するには、ソース・プログラムで RECORDING MODE U を検索します。RECORDING MODE U への参照がない場合、この問題に関して必要な変更は多くはありません。しかし、RECORDING MODE U を使用するプログラムがある場合は、DD ステートメントおよび (場合によっては) そのファイルのデータ・セット属性を確認する必要があります。
- RECORDING MODE U として定義されているファイルの DD ステートメントに RECFM=U が指定されている場合、おそらく、z/OS 言語環境プログラムで実行するためにそのアプリケーションを変更する必要はありません。JCL RECFM=U によって、データ・セット・ラベルがオーバーライドされるので、そのファイルをオープンするために使用されるソース・プログラムおよび属性は整合性が保たれた状態になります。
- RECORDING MODE U として定義されているファイルの DD ステートメントに RECFM=VB (または V あるいは FB) が指定されている場合
、 OS/390 版言語環境プログラム バージョン 2 リリース 10 または z/OS 版言語環境プログラムで実行するためには、アプリケーションを変更する必要があります。
- RECORDING MODE U として定義されたファイルの DD ステートメントに RECFM= の指定がない場合は、
そのファイルのデータ・セット属性を確認する必要があります。データ・セットの RECFM が RECFM=VB、V、または FB である場合、アプリケーションを z/OS 版言語環境プログラムで実行するためには、そのアプリケーションを変更する必要があります。
変更を行う場合は、ファイルのオープン時にそのファイルの RECORDING MODE がデータ・セットの RECFM と
一致するようにしなければなりません。
アプリケーションを変更する場合は、以下の方法を使用することができます。
- ソースを変更して、可変長レコードの処理には、RECORDING MODE V および RECORD 文節のフォーマット 3 である "RECORD IS VARYING FROM n TO nn DEPENDING ON
data-name-1" が使用されるようにすることができます。この RECORD 文節により定義されているファイルから読み取りを行うと、data-name-1 で読み取られた長さと同じ長さのレコードを受け取ります。ファイルが可変ブロック化している場合は、BLOCK CONTAINS 文節を追加してください。
- RECORDING MODE U として定義されたファイルを引き続き処理することができますが、アプリケーションが実際の RECFM=U ファイルを処理できることを確認することが必要です。アプリケーションがファイルを正しく処理できることを
検査するために、RECFM=U の JCL をオーバーライドして、
アプリケーションを実行してください。処理の結果を検証し、
フォーマット U の処理で読み取り、および書き込みされたレコードを
アプリケーションが正しく処理したことを確認してください。
- データ・セットのフォーマットが RECFM=U になるように設定する必要があります。
このフォーマットを設定するには、実際の RECFM の JCL をオーバーライドするか、
そのデータ・セットの実際の RECFM としてフォーマット U を定義します。
この方法を使用する場合は、実際のフォーマット U の処理で戻されるレコードをアプリケーションが適切に処理できることを確認する必要があります。
実際のフォーマット U の処理では、そのファイルに対して読み取りを行うと、それぞれの読み取りからブロック全体を受け取り (フォーマット U のレコードの場合、各ブロックが 1 つのレコードとして書き込まれるため)、これがアプリケーションに戻されます。データ・セットが可変ブロック (RECFM=VB) または固定ブロック
(RECFM=FB) の場合、アプリケーションに戻されるブロックは複数のレコードで構成されるので、これをアプリケーション側で非ブロック化する必要があります。さらに、フォーマット U ファイルへの書き込みによって、各レコードに新たなブロックが
作成されます。 もともと RECFM=VB または RECFM=FB として書き込まれた
既存ファイルへの書き込みが完了すると、RECFM=U として書き込まれたブロックには
単一のレコードが含まれますが、RECFM=FB または RECFM=VB として
書き込まれたファイルには複数のレコードが含まれます。
RECFM も書き込みが完了すると、フォーマット U に変更されます。
ファイルの RECORDING MODE とデータ・セットの RECFM 間の不一致は、COBOL ソースに RECORDING MODE V または F がコーディングされていて、かつ、データ・セットに RECFM=U が設定されている場合にも起こることがあります。このコーディングは現在のところ動作しますが、RECORDING MODE と RECFM が一致するように変更することを推奨します。ファイルの RECORDING MODE とデータ・セットの RECFM の間に不一致がある場合、言語環境プログラムに対して今後行われる変更が原因でアプリケーションが失敗することが予想されます。