REWRITE ステートメントは、直接アクセス・ファイル内にある既存のレコードを 論理的に置き換えます。REWRITE ステートメントを実行するときは、関連する直接アクセス・ファイルは 入出力モードでオープンされていなければなりません。
REWRITE ステートメントは、行順次ファイルについてはサポートされていません。
フォーマット: REWRITE ステートメント >>-REWRITE--レコード名-1---+------------+------------------------> '-FROM--ID-1-' >--+--------------------------------------+-------------------> '-INVALID--+-----+--命令ステートメント-1-' '-KEY-' >--+------------------------------------------+---------------> '-NOT INVALID--+-----+--命令ステートメント-2-' '-KEY-' >--+-------------+--------------------------------------------->< '-END-REWRITE-'
MOVE ID-1 TO レコード名-1. REWRITE レコード名-1
MOVE は、CORRESPONDING 句を指定しない MOVE ステートメントの規則に従って行われます。
ID-1 は、受け取り項目としてレコード名-1 が指定された、 MOVE ステートメントの規則に従う有効な送り出し項目でなければなりません。
ID-1 およびレコード名-1 は、同じストレージ域を参照することはできません。
REWRITE ステートメントの実行後も、ID-1 の中の情報は使用可能です (『共通の処理機能』にある INTO 句および FROM 句を参照)。
INVALID KEY 条件は、次のいずれか場合に起こります。
無効キーの処理の詳細については、無効キー条件を参照してください。
この明示的範囲終了符号は、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 命令ステートメントが指定されていれば、それが実行されます (『共通の処理機能』にある無効キー条件を参照)。この場合、更新処理は行われず、レコード名の中のデータは影響を受けません。