ILE COBOL 解説書

REWRITE ステートメントに関する考慮事項

REWRITE ステートメントの実行が正常に終了すると、レコードは、レコード名-1 では使用可能でなくなります。 ただし、関連するファイルが SAME RECORD AREA 文節内で指定されている場合を除きます (この場合には、 レコードは、SAME RECORD AREA 文節の中で指定されている他のファイルのレコードとしても使用可能です)。

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

FILE-CONTROL 記入項目に FILE STATUS 文節が指定されている場合は、REWRITE ステートメントの実行時に、関連する状況キーが更新されます。

順次ファイル

ファイルに対して実行された最後の入出力ステートメントが、正常に実行された READ ステートメントでなければなりません。 置き換えられるレコードは、そのステートメントによって検索されたレコードです。

INVALID KEY および NOT INVALID KEY 句を指定してはなりません。 EXCEPTION/ERROR プロシージャーは指定できます。

順次編成のファイルについては、レコード名-1 の文字桁数は、置き換えられるレコードの文字桁数と等しくなければなりません。

索引付きファイル

順次アクセス・モードの場合には、ファイルに対して実行された最後の入出力ステートメントが、正常に実行された READ ステートメントでなければなりません。 置き換えられるレコードは、そのステートメントによって検索されたレコードです。RECORD KEY データ項目の値は、レコードが読み取られてから変更されていてはなりません。 値が変更されていると、INVALID KEY 条件が発生します。

ランダムまたは動的アクセス・モードの場合には、置き換えられるレコードは、RECORD KEY データ項目内の値によって指定されます。 ファイルに当該レコードがない場合には、INVALID KEY 条件が発生します。

EXCEPTION/ERROR プロシージャーがファイルに定義されていない場合は、INVALID KEY 句を指定しなければなりません。

索引付き編成のファイルについては、レコード名-1 の文字桁数は、置き換えられるレコードの文字桁数と異なっていても構いません。

+----------------------------------IBM 拡張----------------------------------+

ファイルに対して EXTERNALLY-DESCRIBED-KEY が指定されているときには、FORMAT 句によって指定されている形式 (あるいは、FORMAT 句が使用されていない場合には、 最初の形式) に対応するレコード域内にあるキー・データが、RECORD KEY データ項目の現行値を決定するために使用されます。

WITH DUPLICATES 句がファイルに指定されている場合には、 すべてのアクセス・モード (順次、ランダム、動的) において、ファイルに対して実行された最後の入出力ステートメントが、 正常に実行された READ ステートメントでなければなりません。 置き換えられるレコードは、そのステートメントによって検索されたレコードです。RECORD KEY データ項目の値は、レコードが読み取られてから変更されていてはなりません。 値が変更されていると、INVALID KEY 条件が発生します。

注:
重複キーがファイル内にあるような場合に正しいレコードが置き換えられるようにするには、READ ステートメントが必要です。 重複キーを持つ一連のレコードのうちの特定の 1 つのレコードを再書き込みする唯一の方法は、 各レコードを順次に読み取り、識別したあとで、該当するレコードを再書き込みすることです。

+------------------------------End of IBM 拡張-------------------------------+

相対ファイル

順次アクセス・モードの場合には、ファイルに対して実行された最後の入出力ステートメントが、正常に実行された READ ステートメントでなければなりません。 置き換えられるレコードは、そのステートメントによって検索されたレコードです。INVALID KEY および NOT INVALID KEY 句を指定してはなりません。 EXCEPTION/ERROR プロシージャーは指定できます。

ランダムまたは動的アクセス・モードの場合には、置き換えられるレコードは、RELATIVE KEY データ項目内の値によって指定されます。 ファイルに当該レコードがない場合には、INVALID KEY 条件が発生します。EXCEPTION/ERROR プロシージャーがファイルに定義されていない場合は、INVALID KEY 句を指定しなければなりません。

相対編成のファイルについては、レコード名-1 の文字桁数は、置き換えられるレコードの文字桁数と異なっていても構いません。

+----------------------------------IBM 拡張----------------------------------+

レコード・ロック

以下のファイル・タイプの REWRITE ステートメントの前に、READ ステートメントを正常に実行しておく必要があります。

このような READ ステートメントには NO LOCK 句を入れてはいけません。 READ ステートメントによって選択されているレコードを置き換えようとしており、 そのレコードが読み取られたときにロックされなかった場合には、REWRITE ステートメントは正常に実行されません。

+------------------------------End of IBM 拡張-------------------------------+


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]