Rational Developer for System z
COBOL for Windows バージョン 7.5 言語解説書


REWRITE ステートメント

REWRITE ステートメントは、直接アクセス・ファイル内にある既存のレコードを論理的に置き換えます。 REWRITE ステートメントを実行するときは、関連する直接アクセス・ファイルは 入出力モードでオープンされていなければなりません。

REWRITE ステートメントは、行順次ファイルについてはサポートされていません。

フォーマット
構文図を読む構文図をスキップする>>-REWRITE--レコード名-1--+------------+------------------------>
                          '-FROM--ID-1-'  
 
>--+----------------------------------------+------------------->
   '-INVALID--+-----+--命令ステートメント-1-'  
              '-KEY-'                          
 
>--+--------------------------------------------+--------------->
   '-NOT INVALID--+-----+--命令ステートメント-2-'  
                  '-KEY-'                          
 
>--+-------------+---------------------------------------------><
   '-END-REWRITE-'  
 
レコード名-1
データ部の FD 項目内にある論理レコードの名前でなければなりません。レコード名は修飾することができます。
FROM 句
FROM ID-1 を指定した REWRITE ステートメントの実行結果は、 次のステートメントを指定した順序で実行した場合と同じになります。

MOVE identifier-1 TO record-name-1.
REWRITE record-name-1    

MOVE は、CORRESPONDING 句を指定しない MOVE ステートメントの規則に従って行われます。

ID-1
ID-1 は、以下のいずれかを参照できます。

ID-1 は、受け取り項目としてレコード名-1 が指定された、 MOVE ステートメントの規則に従う有効な送り出し項目でなければなりません。

ID-1 およびレコード名-1 は、同じストレージ域を参照することはできません。

REWRITE ステートメントの実行後も、ID-1 の中の情報は使用可能です (『共通の処理機能』にある INTO 句および FROM 句を参照)。

INVALID KEY 句

(『共通の処理機能』にある 無効キー条件を参照。)

INVALID KEY 条件は、次のいずれか場合に起こります。

 

END-REWRITE 句

この明示的範囲終了符号は、REWRITE ステートメントの範囲を区切るために使用されます。 END-REWRITE 句を使用することによって、 条件的な REWRITE ステートメントを他の条件ステートメントの中にネストすることができます。 END-REWRITE 句は、命令の REWRITE ステートメントと共に使用することもできます。

詳しくは、範囲区切りステートメントを参照してください。

論理レコードの再使用

REWRITE ステートメントが正常に実行されると、関連付けられたファイルが SAME RECORD AREA 文節の中で指定されていない限り、レコード名-1 の中の論理レコードはもはや使用可能ではありません (SAME RECORD AREA 文節で指定されている場合、レコードは、その SAME RECORD AREA 文節で指定されている他のファイルのレコードとしても使用可能です)。

ファイル位置標識は、REWRITE ステートメントの実行によって影響を受けることはありません。

ファイル制御項目内に FILE STATUS 文節が指定されている場合は、 関連するファイル状況キーが、REWRITE ステートメントの実行時に更新されます。

順次ファイル

ファイルが順次アクセス・モードの場合、このファイルに対して最後に実行された前回の入出力ステートメントは、 正常に実行された READ ステートメントでなければなりません。 REWRITE ステートメントを実行すると、 READ ステートメントによって取り出されたレコードが論理的に置き換えられます。

レコード名-1 の中の文字位置の数は、置き換えられるレコードの中の文字位置の数と等しくなければなりません。

順次編成のファイルに対しては、INVALID KEY 句を指定することはできません。 EXCEPTION/ERROR プロシージャーを指定することはできます。

索引付きファイル

レコード名-1 の中の文字位置の数は、 置き換えられるレコードの中の文字位置の数と異なる数にすることができます。

順次アクセス・モードの場合、置き換えられるレコードは基本 RECORD KEY の中にある値によって指定されます。 REWRITE ステートメントを実行するときには、この値は、 このファイルから読み込まれた最後のレコードの中の基本 RECORD KEY データ項目の値と等しくなければなりません。

INVALID KEY 句および利用可能な EXCEPTION/ERROR プロシージャーは、両方とも省略することができます。

アクセス・モードがランダムかまたは動的であるとき、置き換えられるレコードは、 基本 RECORD KEY の中にある値によって指定されます。

書き直されるレコードの中の ALTERNATE RECORD KEY データ項目の値は、 置き換えられるレコードの中の値と異なるものにすることができます。システムは、 後でそのレコードにアクセスする際に、どのレコード・キーでも可能にします。

無効なキー条件が生じると、REWRITE ステートメントの実行は失敗し、 更新処理は行われません。この場合、レコード名-1 の中のデータは影響を受けません (『共通の処理機能』にある 無効キー条件を参照。)

相対ファイル

レコード名-1 の中の文字位置の数は、 置き換えられるレコードの中の文字位置の数と異なる数にすることができます。

順次アクセス・モードの相対ファイルの場合、 INVALID KEY 句を指定することはできません。 EXCEPTION/ERROR プロシージャーを指定することはできます。

ランダム・アクセス・モードまたは動的アクセス・モードの相対ファイルの場合、 INVALID KEY 句または利用可能な EXCEPTION/ERROR プロシージャーは指定できません。 これらは、両方とも省略することができます。

アクセス・モードがランダムまたは動的である場合、置き換えられるレコードは、 RELATIVE KEY データ項目の中で指定します。ファイルに指定したレコードがない場合、無効なキー条件が生じ、 INVALID KEY 命令ステートメントが指定されていれば、それが実行されます。 (『共通の処理機能』にある 無効キー条件を参照。)この場合、更新処理は行われず、レコード名の中のデータは影響を受けません。


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

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