REWRITE 文

REWRITE 文は、ディスク ファイル内にあるレコードを論理的に置換する。
MF 

書き方 1 の一般形式 (行順編成ファイル)


REWRITE - FORMAT 1

書き方 2 の一般形式 (レコード順編成ファイル)


REWRITE - FORMAT 2

書き方 3 の一般形式 (相対ファイルおよび索引ファイル)


REWRITE - FORMAT 3

指令およびランタイム システム スイッチ

  1. 予約語リストのフラグ設定および修正を行うコンパイラ指令に加えて、以下の指令が、本セクションに記載の構文または意味内容に影響を与える可能性がある。
    • WRITE-LOCK - 複数のレコード ロックを使用する際に、REWRITE 文用のレコード ロックを取得する。
  2. 以下のランタイム システム (RTS) スイッチにより、本セクションに記載されている意味が影響を受ける可能性がある。
    • N - 行順編成レコードを記述する際に、制御文字に先行する空文字の挿入を制御する。
    • T - 行順編成レコードを記述する際に、タブ文字の挿入を制御する。

すべての書き方に関する構文規則 (すべてのファイル)

  1. ANS85 identifier が関数一意名である場合、英数字関数を参照するものとする。identifier が関数一意名でない場合は、

    record-name および identifier は同じ記憶領域を参照できない。

  2. record-name はデータ部のファイル節内の論理レコードの名前であり、修飾してもよい。
  3. OSVSVSC2MF record-name には、浮動小数点数項目または 2 バイト文字 (DBCS) 項目を定義できる。
  4. OSVSVSC2MF identifier には、USAGE DISPLAY-1 (DBCS) 項目または浮動小数点数項目を指定できる。

書き方 3 の構文規則 (相対ファイルおよび索引ファイル)

  1. 順呼び出し法でファイルを参照する REWRITE 文には、INVALID KEY を指定できない。

    OSVSVSC2 ただし、順呼び出し法で索引ファイルを処理している場合には、REWRITE 文に INVALID KEY を指定してもよい。

  2. 乱呼び出し法または動的呼び出し法でファイルを処理しているが、処理対象のファイルに該当する USE 手続きを指定していない場合は、REWRITE 文で INVALID KEY を指定する。

すべての書き方に関する一般規則 (すべてのファイル)

  1. record-name に関連付けたファイルはディスク ファイルとし、この文の実行時には、I-O (入出力両用) モードで開く。「OPEN 文」セクションを参照。
  2. ファイルを順呼び出し法で処理する場合、REWRITE 文を実行する前に、関連付けたファイルに対して READ 文を実行し、正常に完了しておく必要がある。オペレーティング システムにより、READ 文が呼び出したレコードが論理的に置換される。
  3. FROM を指定して REWRITE 文を実行することは、
     MOVE identifier TO record-name

    を実行してから、FROM を指定せずに同じ REWRITE 文を実行することに等しい。暗黙の MOVE 文を実行する前のレコード領域の内容は、REWRITE 文の実行に影響を与えない。

  4. ファイル位置指示子は、REWRITE 文の実行の影響を受けない。
  5. REWRITE 文を実行すると、その対象のファイルに関連付けた FILE STATUS データ項目 (ある場合) の値が更新される。「手続き部」の章の「入出力状態」のトピックを参照。
  6. ANS85 END-REWRITE 指定は、REWRITE 文の範囲を区切る。
  7. MF 書き換え対象のレコードが他の実行単位によってロックされている場合、REWRITE 文の実行は失敗する。

書き方 1 および 2 の一般規則 (順編成ファイル)

  1. record-name が参照するレコードの文字位置数は、書き換え対象のレコードの文字位置数と等しくする。
    注: 圧縮された順編成ファイルへの REWRITE 文の使用は推奨されない。これは、圧縮された新しいレコードの長さが、圧縮された古いレコードの長さと同じでないと、REWRITE 処理が失敗するためである。
  2. REWRITE 文の実行が成功すると、レコード領域内の論理レコードは解放されて利用できなくなる。ただし、関連付けたファイルを SAME RECORD AREA 句で指定すれば利用できる。この場合、その論理レコードはレコード領域でそのファイルのレコードとして利用できるだけではなく、SAME RECORD AREA 句で指定した他のファイルのレコードとしても利用できる。
MF 

書き方 1 の一般規則 (行順編成ファイル)

  1. MF 書き込み対象のレコードの圧縮された長さ (後続空白文字の削除、タブの圧縮、および空文字の挿入を行った後の長さ) が、元の圧縮されたレコードの長さ以下である場合、REWRITE 文を使用して正常に実行できる。レコードを読み取ると、レコード内の空文字およびタブ文字が展開されることがあり、その場合はレコードが長くなる。

書き方 3 の一般規則 (相対ファイルおよび索引ファイル)

  1. REWRITE 文の実行が成功すると、レコード領域内の論理レコードは解放されて利用できなくなる。ただし、関連付けたファイルを SAME RECORD AREA 句で指定すれば利用できる。この場合、その論理レコードは、record-name に関連付けたファイルの論理レコードとしてだけではなく、関連付けた入出力ファイルと同じ SAME RECORD AREA 句で指定した他のファイルのレコードとしても利用できる。

書き方 3 の一般規則 (相対ファイル)

  1. 乱呼び出し法または動的呼び出し法で処理しているファイルに関しては、オペレーティング システムは、そのファイルに関連付けた RELATIVE KEY データ項目の内容が指定するレコードを論理的に置換する。そのキーが指定するレコードがファイルに含まれていない場合は、INVALID KEY 条件が発生する (「手続き部」の章の「INVALID KEY 条件」トピックを参照)。この場合、更新処理は行われず、レコード領域内のデータはそのまま残る。

書き方 3 の一般規則 (索引ファイル)

  1. 順呼び出し法で処理しているファイルに関しては、置換対象のレコードは主レコード キーに含まれる値で指定する。REWRITE 文を実行する際に、置換対象のレコードの主レコード データ項目に含まれる値は、このファイルから最後に読み取ったレコードの主レコード キーの値と等しくなければならない。
  2. 乱呼び出し法または動的呼び出し法で処理しているファイルに関しては、置換対象のレコードは主レコード キーのデータ項目で指定する。
  3. 再書き込み中のレコードの副レコード キーのデータ項目の内容は、置換先の内容と異なる場合がある。オペレーティング システムは、指定した任意のレコード キーでその後レコードを呼び出せるように、REWRITE 文の実行中にレコード キーのデータ項目の内容を使用する。
  4. 以下のいずれかに該当する場合、INVALID KEY 条件が発生する。
    1. 順呼び出し方式でファイルを処理している際に、置換対象のレコードの主レコード キー データ項目の値が、このファイルから最後に読み取ったレコードの主レコード キーの値と一致しない場合
    2. 主レコード キー データ項目に含まれる値が、ファイルに格納されているいずれのレコードの値とも一致しない場合
    3. DUPLICATES 句が指定されていない副レコード キー データ項目に含まれる値が、ファイルにすでに格納されているレコードの値と一致する場合

    上記の場合、更新処理は行われず、レコード領域中のデータはそのまま残る。「手続き部」の章の「INVALID KEY 条件」トピックを参照。