Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 言語解説書


REWRITE ステートメント

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 ID-1 TO レコード名-1.
REWRITE レコード名-1    

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

ID-1
ID-1 は、以下のいずれかを参照できます。
  • すでにオープンされた別のファイルのレコード記述
  • 英数字関数、または国別関数
  • 作業用ストレージ・セクション、ローカル・ストレージ・セクション、またはリンケージ・セクションに定義されたデータ項目

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

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

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

INVALID KEY 句

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

  • アクセス・モードが順次であり、置き換えられるレコードの基本 RECORD KEY に含 まれている値が、このファイルから最後に取り出されたレコードの基本 RECORD KEY データ項目に等しくない場合
  • 基本 RECORD KEY に含まれる値が、ファイル内のどのレコードの基本 RECORD KEY とも等しくない場合
  • DUPLICATES の指定されていない ALTERNATE RECORD 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 命令ステートメントが指定されていれば、それが実行されます (『共通の処理機能』にある無効キー条件を参照)。この場合、更新処理は行われず、レコード名の中のデータは影響を受けません。


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

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