Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

REWRITE-Anweisung

&pagelevel(4)&pagelevel

Funktion

Mit Hilfe der REWRITE-Anweisung können Datensätze einer Plattenspeicherdatei ersetzt werden.

Format 1 für sequenzielle Dateiorganisation


REWRITE datensatzname [FROM bezeichner] [END-REWRITE]


Format 2 für relative und indizierte Dateiorganisation


REWRITE datensatzname [FROM bezeichner]

[INVALID KEY unbedingte-anweisung-1]

[NOT INVALID KEY unbedingte-anweisung-2]

[END-REWRITE]


Syntaxregeln

  1. datensatzname und bezeichner dürfen sich nicht auf den gleichen Speicherbereich beziehen.

  2. datensatzname muss einer Dateierklärung (FD) der DATA DIVISION des Programmes zugeordnet sein und darf gekennzeichnet werden.

  3. INVALID KEY muss bei relativ und indiziert organisierten Dateien mit wahlfreiem Zugriff angegeben werden, es sei denn, es wurde eine entsprechende USE-Prozedur vereinbart. INVALID KEY darf nicht angegeben werden bei relativ organisierten Dateien mit sequenziellem Zugriff.

  4. Für zeilensequenzielle Dateien ist die REWRITE-Anweisung nicht zulässig.

Allgemeine Regeln

Für sequenzielle, relative und indizierte Dateiorganisation gilt:

  1. datensatzname bezeichnet den Datensatz, der ersetzt werden soll.

  2. Die mit datensatzname verknüpfte Datei muss eine Plattenspeicherdatei sein und muss bei Ausführung der REWRITE-Anweisung mit I-O eröffnet worden sein.

  3. Die Ausführung einer REWRITE-Anweisung mit der Angabe FROM entspricht den folgenden Anweisungen:

    MOVE bezeichner TO datensatzname
    der gleichen REWRITE-Anweisung ohne FROM Angabe

    Der durch datensatzname beschriebene Inhalt des Speicherbereichs vor Ausführung der impliziten MOVE-Anweisung hat keine Bedeutung für die Ausführung der REWRITE-Anweisung.

    Bei Verwendung der FROM-Angabe werden die Daten von bezeichner nach datensatzname übertragen und dann in die entsprechende Datei ausgegeben.Mit bezeichner kann jeder Datenbereich bezeichnet werden, der außerhalb der gerade angesprochenen Dateierklärung liegt.

    Die Datenübertragung durch die implizite MOVE-Anweisung findet entsprechend den Regeln der MOVE-Anweisung ohne die CORRESPONDING-Angabe statt. Nach Ausführung der REWRITE-Anweisung steht der Satzinhalt nach wie vor im durch bezeichner beschriebenen Bereich zur Verfügung, jedoch nicht in dem durch datensatzname bezeichneten Bereich.

  4. Für Dateien im sequenziellen Zugriffsmodus gilt:

    1. Einer REWRITE-Anweisung muss eine erfolgreich abgelaufene READ-Anweisung als letzte Ein-/Ausgabe-Anweisung für die zugehörige Datei vorangegangen sein.

    2. Bei Ausführung der REWRITE-Anweisung wird der durch die vorhergehende READ-Anweisung zur Verfügung gestellte Datensatz in der Datei ersetzt.

    3. Der Inhalt des durch die RELATIVE KEY-Angabe (bei relativ organisierten Dateien) bzw. durch die RECORD-KEY-Klausel (bei indiziert organisierten Dateien) angegebenen Datenfeldes darf zwischen der READ- und REWRITE-Anweisung nicht geändert werden.

  5. Einer REWRITE-Anweisung muss eine erfolgreich abgelaufene READ-Anweisung als letzte Ein-/Ausgabe-Anweisung für die zugehörige Datei vorangegangen sein.

  6. Bei Ausführung der REWRITE-Anweisung wird der durch die vorhergehende READ-Anweisung zur Verfügung gestellte Datensatz in der Datei ersetzt.

  7. Der Datensatz, der durch eine erfolgreich abgelaufene REWRITE-Anweisung zurückgeschrieben wurde, steht im Satzbereich nicht mehr zur Verfügung; eine Ausnahme stellt die Verwendung der SAME RECORD AREA-Klausel dar. In diesem Fall steht der Datensatz sowohl allen anderen Dateien, die in der SAME RECORD AREA-Klausel aufgeführt wurden, als auch der gerade bearbeiteten Datei als Datensatz zur Verfügung.

  8. Die Ausführung einer REWRITE-Anweisung bewirkt, dass der Inhalt des Datenfeldes aktualisiert wird, das in der FILE STATUS-Klausel der zugehörigen Dateierklärung angegeben wurde (siehe auch „FILE STATUS-Klausel").


    Für relative und indizierte Dateiorganisation gilt:

  9. Die Länge des zu ersetzenden Datensatzes kann geändert werden.

  10. Für Dateien im wahlfreien oder dynamischen Zugriffsmodus wird der Datensatz ersetzt, der bei relativ organisierten Dateien durch den Inhalt des mit der Datei verknüpften RELATIVE KEY-Datenfeldes angesprochen wurde, bei indiziert organisierten Dateien durch den Inhalt des durch RECORD KEY angegebenen Datenfeldes.

  11. Die Anzahl der Zeichenpositionen in dem durch datensatzname bezeichneten Datensatz darf nicht größer als die größte und nicht kleiner als die kleinste Anzahl von Zeichenpositionen sein, die laut RECORD IS VARYING-Klausel für den Datensatz erlaubt ist. Andernfalls ist die Ausführung der REWRITE-Anweisung erfolglos, die Aktualisierungsoperation findet nicht statt, der Inhalt des Satzbereichs bleibt unbeeinflusst und der Ein-/Ausgabe-Zustand für die entsprechende Datei wird auf den Wert gesetzt, der das Überschreiten der Satzlängengrenzen anzeigt (siehe „Ein-/Ausgabe-Zustand").


    Nur für sequenzielle Dateiorganisation gilt:

  12. Die Länge des durch datensatzname angesprochenen Datensatzes muss gleich der Länge des zu ersetzenden Datensatzes der Datei sein.

  13. Ist die Anzahl der Zeichenpositionen von datensatzname und des zu ersetzenden Datensatzes nicht gleich, ist die Ausführung der REWRITE-Anweisung erfolglos, die Aktualisierung findet nicht statt, der Inhalt des Satzbereichs bleibt unberührt und der Ein-/Ausgabe-Zustand der Datei zeigt das Überschreiten der Bereichsgrenzen an.

  14. Das Zurückschreiben eines Datensatzes bewirkt erst dann eine Veränderung des Satzinhaltes auf der zugehörigen Plattenspeicherdatei, wenn der nächste Block der Datei gelesen oder die Datei geschlossen wird.


    Nur für relative Dateiorganisation gilt:

  15. Falls die Datei keinen Datensatz enthält, der dem Inhalt des Datenfeldes des RELATIVE KEY entspricht, tritt die Schlüsselfehler-Bedingung auf (siehe „Schlüsselfehler-Bedingung"). In diesem Fall ist die Ausführung der REWRITE-Anweisung erfolglos, die Aktualisierung findet nicht statt, die Inhalte des Satzbereichs bleiben unberührt und der Ein-/Ausgabe-Zustand der Datei wird auf einen Wert gesetzt, der die Schlüsselfehler-Bedingung anzeigt.

  16. Die Fortsetzung des Ablaufs der REWRITE-Anweisung hängt davon ab, ob INVALID KEY oder NOT INVALID KEY angegeben ist (siehe „Schlüsselfehler-Bedingung").

  17. Beim Zurückschreiben eines Datensatzes ist darauf zu achten, dass im ersten Byte des Satzes nicht der Wert X’FF’ enthalten ist, da dies das logische Löschen des Satzes bewirkt.

    Nur für indizierte Dateiorganisation gilt:

  18. Die Schlüsselfehler-Bedingung tritt unter einer der folgenden Situationen auf:

    1. im sequenziellen Zugriffsmodus: wenn der Primärschlüsselwert des zu ersetzenden Datensatzes nicht gleich dem Primärschlüsselwert des letzten aus der Datei gelesenen Datensatzes ist,

    2. im dynamischen oder wahlfreien Zugriffsmodus: wenn der Primärschlüsselwert des zu ersetzenden Datensatzes nicht gleich ist dem Primärschlüsselwert irgendeines Datensatzes der Datei,

    3. wenn der Alternativschlüsselwert des zu ersetzenden Satzes, für den Duplikate nicht zugelassen sind, gleich ist dem Wert des zugehörigen Datenfeldes eines schon in der Datei vorhandenen Datensatzes.

  19. Für einen Datensatz mit Alternativschlüssel wird die REWRITE-Anweisung folgendermaßen ausgeführt:

    1. Ist der Wert eines bestimmten Alternativschlüssels unverändert, bleibt die Reihenfolge der Leseoperationen unverändert, falls dieser Schlüssel der Bezugsschlüssel ist.

    2. Ist der Wert eines bestimmten Alternativschlüssels verändert, kann die Reihenfolge der Leseoperationen für diesen Satz, geändert werden, wenn sein Schlüssel der Bezugsschlüssel ist. Sind Duplikate zugelassen, ist der Satz der logisch letzte aus der Gruppe der Duplikate, die denselben Alternativschlüsselwert besitzen wie der zu ersetzende Datensatz.