Natural-Statements und Natural-Transaktionslogik mit VSAM

#### Search Results

Search

# Natural-Statements und Natural-Transaktionslogik mit VSAM

Dieses Kapitel beschreibt Besonderheiten, die hinsichtlich der Natural-Statements und Systemvariablen bei der Verwendung mit VSAM zu berücksichtigen sind. Darüber hinaus wird die Natural-Transaktionslogik im Zusammenhang mit VSAM behandelt.

Die Natural-Statements, die für den Zugriff auf VSAM-Dateien verwendet werden, sind eine Untermenge der in der Programmiersprache Natural enthaltenen Statements. Für den Zugriff auf eine VSAM-Datei sind keine neuen Statements erforderlich, da jedes Natural-Statement unabhängig vom Datenbankmanagementsystem oder der verwendeten Zugriffsmethode dieselbe Funktion erfüllt. Daher können Programme, die für VSAM-Dateien geschrieben wurden, auch für den Zugriff auf Adabas-Datenbanken verwendet werden.

Die Natural-Schnittstelle zu VSAM hat keine eingebaute Transaktionslogik und verwendet die Transaktionslogik der Umgebung, in der sie läuft. Dies führt je nach Umgebung zu unterschiedlichen Resultaten.

In diesem Kapitel werden die folgenden Themen behandelt:

- Natural-Statements mit VSAM

- Natural-Transaktionslogik im Zusammenhang mit VSAM

## Natural-Statements mit VSAM

Dieser Abschnitt umfasst in der Hauptsache Informationen, die auch in der Dokumentation zu Natural-Statements enthalten sind. Dort wird jede Natural-Statement im Detail beschrieben, gegebenenfalls mit Hinweisen zur Verwendung bei VSAM. Im Folgenden sind die besonderen Punkte zusammengefasst, die ein Programmierer bei der Verwendung von Natural-Statements mit VSAM beachten muss.

Anmerkung
Da der Natural-Compiler nicht prüft, ob ein Programm die durch die Natural-Schnittstelle zu VSAM auferlegten Beschränkungen einhält, treten VSAM-spezifische Programmierfehler bei der Verwendung von Natural-Statements erst bei der Ausführung des Programms auf.

Natural-Statements, die in diesem Abschnitt nicht erwähnt wird, können ohne Einschränkungen mit VSAM verwendet werden.

- BACKOUT TRANSACTION

- DELETE

- END TRANSACTION

- FIND

- GET

- GET SAME

- GET TRANSACTION DATA

- HISTOGRAM

- READ

- STORE

- UPDATE

### BACKOUT TRANSACTION

Das `BACKOUT TRANSACTION`-Statement wird verwendet, um alle Datenbankaktualisierungen, die während der aktuellen logischen Benutzertransaktion durchgeführt wurden, rückgängig zu machen. Dieses Statement gibt außerdem alle während der Transaktion gehaltenen Datensätze frei.

Bei Verwendung mit Natural for VSAM gibt das `BACKOUT TRANSACTION`-Statement Datensätze in der UPD-Tabelle frei. Es werden keine Transaktionen rückgängig gemacht, es sei denn, Natural läuft unter einem TP-Monitor oder DFSMStvs, der das dynamische Rückgängigmachen von Transaktionen unterstützt (z. B. CICS). In diesem Fall wird ein `ROLLBACK` zum letzten `SYNCPOINT` ausgegeben.

### DELETE

Das `DELETE`-Statement wird verwendet, um einen Datensatz aus einer VSAM-Datei zu löschen.

Die Verwendung des `DELETE`-Statements setzt jeden in dem entsprechenden `FIND`- oder `READ`-Statement ausgewählten Datensatz in den Hold-Status.

Das `DELETE`-Statement ist nicht gültig bei VSAM Entry-Sequenced Data Sets (ESDS).

### END TRANSACTION

Das `END TRANSACTION`-Statement wird verwendet, um das Ende einer logischen Transaktion anzuzeigen. Eine logische Transaktion ist die kleinste logische Arbeitseinheit (wie vom Benutzer definiert), die in ihrer Gesamtheit ausgeführt werden muss, um die logische Konsistenz der in der VSAM-Datei enthaltenen Informationen zu gewährleisten.

Das `END TRANSACTION`-Statement gibt auch alle Sätze frei, die während der Transaktion in den Hold-Status gesetzt wurden.

Ein `END TRANSACTION`-Statement gibt nur die in der UPD-Tabelle gehaltenen Datensätze frei, es sei denn, Natural läuft unter einem TP-Monitor oder DFSMStvs, der ein dynamisches Rückgängigmachen (Backout) von Transaktionen unterstützt (z. B. CICS). In diesem Fall bewirkt ein `END TRANSACTION`-Statement, dass ein `SYNCPOINT` ausgegeben wird.

### FIND

Das `FIND`-Statement wird verwendet, um einen Set von Datensätzen aus der VSAM-Datei anhand eines Suchkriteriums auszuwählen, das aus Feldern besteht, die als Deskriptoren (Schlüssel) definiert sind.

Die `WITH`-Klausel wird verwendet, um das Suchkriterium anzugeben, das aus in der VSAM-Datei definierten Schlüsselfeldern (Deskriptoren) besteht.

Es können nur VSAM-Schlüsselfelder verwendet werden.

Die Anzahl der als Ergebnis einer `WITH`-Klausel auszuwählenden Datensätze kann durch die Angabe des Schlüsselworts `LIMIT` zusammen mit einem Grenzwert (`operand1`), der als numerische Konstante oder als benutzerdefinierte Variable ausgedrückt wird, begrenzt werden. Der Limit-Wert wird in Klammern gesetzt. Wenn die Anzahl der ausgewählten Datensätze den Limit-Wert überschreitet, wird das Programm mit einer Fehlermeldung abgebrochen.

Der Deskriptor muss in einer VSAM-Datei als VSAM-Schlüsselfeld definiert sein. In einem DDM wird er mit `P` für Primärschlüssel, `S` für primärer Sub-/Superdeskriptor, `X` für alternativer Sub-/Superdeskriptor oder `A` für alternativer Schlüssel gekennzeichnet (siehe DDM bearbeiten im Abschnitt Betrieb und die Beschreibung DDM-Editor (SYSDDM Utility) in der Natural-Editoren-Dokumentation).

Die Formate des Deskriptors und des Suchwertes müssen kompatibel sein.

Die folgenden Natural-Systemvariablen sind beim `FIND`-Statement verfügbar:

Variable | Inhalt
--- | ---
`*ISN` | Die Systemvariable `*ISN` enthält die relative Byte-Adresse des zurzeit in Bearbeitung befindlichen Datensatzes (nur ESDS-Dateien). Diese Variable steht bei den Statements `FIND NUMBER` und `FIND FIRST` nicht zur Verfügung.
`*NUMBER` | Die Systemvariable `*NUMBER` enthält die Anzahl der Datensätze, die das in der `WITH`-Klausel angegebene Basissuchkriterium erfüllen, und zwar vor der Auswertung eines `WHERE`-Kriteriums. `*NUMBER` enthält nur dann einen aussagefähigen Wert, wenn im Suchkriterium der Operator `EQUAL TO` verwendet wird. Bei jedem anderen Operator ist `*NUMBER` `0`, wenn keine Datensätze gefunden wurden. Jeder andere Wert zeigt an, dass Datensätze gefunden wurden, aber der Wert hat keinen Bezug zur Anzahl der tatsächlich gefundenen Datensätze. Dasselbe gilt für `*NUMBER` beim Statement `FIND NUMBER`.
`*COUNTER` | Die Systemvariable `*COUNTER` enthält die Anzahl der Aufrufe der Verarbeitungsschleife. Diese Systemvariable ist beim Statement `FIND NUMBER` nicht verfügbar.

Das `FIND`-Statement ist nur für Key-Sequenced (KSDS) und Entry-Sequenced (ESDS) VSAM-Datasets gültig. Für ESDS muss ein alternativer Index oder ein Pfad für einen alternativen Index definiert werden. Relative Record Datasets (RRDS) sind nicht zulässig, da sie keine Schlüsselfelder (Deskriptoren) enthalten.

### GET

Das `GET`-Statement wird verwendet, um einen Datensatz mit einer bestimmten VSAM-Datensatznummer zu lesen. Bei einer ESDS-Datei ist die Datensatznummer (ISN) die relative Byte-Adresse (RBA). Bei RRDS- und VRDS-Dateien ist es die relative Datensatznummer (RRN). Das `GET`-Statement initiiert keine Verarbeitungsschleife. Folglich wird ein nachfolgendes `UPDATE`- oder `DELETE`-Statement nicht verarbeitet und Natural gibt eine entsprechende Fehlermeldung zurück.

Für ESDS muss die RBA in einer benutzerdefinierten Variablen (numerisches Format) enthalten sein oder als Integer-Konstante angegeben werden. Für RRDS und VRDS gelten dieselben Regeln, mit der Ausnahme, dass die RRN anstelle des RBA angegeben werden muss.

### GET SAME

Das `GET SAME`-Statement gilt nur für VSAM ESDS, RRDS und VRDS (siehe auch das `GET`-Statement weiter oben).

### GET TRANSACTION DATA

Das `GET TRANSACTION DATA`-Statement ist nicht bei der Natural-Schnittstelle zu VSAM anwendbar.

### HISTOGRAM

Das `HISTOGRAM`-Statement wird verwendet, um die Werte eines Feldes zu lesen, das als Deskriptor, Subdeskriptor oder Superdeskriptor definiert ist.

Das `HISTOGRAM`-Statement initiiert eine Verarbeitungsschleife, bietet aber keinen Zugriff auf andere Felder als das in dem Statement angegebene Feld.

Als Deskriptoren können nur VSAM-Schlüsselfelder verwendet werden.

Die folgende Natural-Systemvariable ist mit dem `HISTOGRAM`-Statement verfügbar:

Variable | Inhalt
--- | ---
`*NUMBER` | Wenn die Systemvariable `*NUMBER` in Verbindung mit einem KSDS-Primärschlüssel oder einem eindeutigen alternativen Index verwendet wird, ist ihr Inhalt immer `1`.

Anmerkung
Die Systemvariable `*ISN` ist bei der Natural-Schnittstelle zu VSAM nicht verfügbar.

Bei Verwendung mit VSAM ist das `HISTOGRAM`-Statement nur für KSDS- und ESDS-Datasets gültig. Für ESDS muss ein alternativer Index oder ein Pfad für einen alternativen Index definiert werden.

Die Werte werden direkt aus dem VSAM-Index gelesen und in auf- oder absteigender Reihenfolge zurückgegeben.

### READ

Das `READ`-Statement wird verwendet, um Datensätze aus einer VSAM-Datei zu lesen. Die Sätze können in der Reihenfolge (auf- oder absteigend) der Werte eines Deskriptorfeldes (Schlüssel) abgerufen werden. Die `READ`-Sequenz initiiert eine Verarbeitungsschleife.

`IN LOGICAL SEQUENCE` wird verwendet, um Datensätze in der Reihenfolge der Werte eines Deskriptors (Schlüssel) zu lesen. Wenn `LOGICAL` mit einem Deskriptor angegeben wird, werden die Datensätze in der Reihenfolge der Werte des Deskriptors gelesen. Ein Deskriptor kann zur Reihenfolgesteuerung verwendet werden. Ein Deskriptor innerhalb einer Periodengruppe kann nicht verwendet werden. Wird `LOGICAL` ohne Deskriptor angegeben, werden die Datensätze in der Standard-Deskriptorreihenfolge gelesen, wie sie im DDM definiert ist.

`WITH REPOSITION` kann zum Übergehen der sequenziellen Verarbeitung innerhalb der aktiven Schleife verwendet werden. Die neue Position muss als neuer Startwert für die Schleife definiert werden und die Systemvariable `*COUNTER` zurücksetzen.

`IN LOGICAL SEQUENCE` ist nur für KSDS mit definierten Primärschlüsseln und Alternativschlüsseln und ESDS mit definierten Alternativschlüsseln gültig. Auch ein Subdeskriptor oder Superdeskriptor kann zur Ablaufsteuerung verwendet werden.

Die folgenden Natural-Systemvariablen stehen beim `READ`-Statement zur Verfügung:

Variable | Inhalt
--- | ---
`*ISN` | Die Systemvariable `*ISN` enthält entweder die RRN (für RRDS oder VRDS) oder die RBA (für ESDS) des aktuellen Datensatzes.
`*COUNTER` | Die Systemvariable `*COUNTER` enthält die Anzahl der Einsprünge in die Verarbeitungsschleife.

Datensätze können auch `IN PHYSICAL SEQUENCE` abgerufen werden, was dazu dient, Datensätze in der Reihenfolge zu lesen, in der sie physisch in einer Datenbank gespeichert sind. Sie ist nur bei VSAM ESDS, RRDS und VRDS gültig. Dies ist die Standardreihenfolge.

`STARTING WITH ISN` kann als Startwert für die Schleife in aufsteigender oder absteigender physischer Reihenfolge verwendet werden.

`BY ISN` wird verwendet, um Datensätze in RBA- und RRN-Reihenfolge für ESDS-, RRDS- bzw. VRDS-Dateien zu lesen.

### STORE

Das `STORE`-Statement wird verwendet, um einen Datensatz in einer Datenbank hinzuzufügen.

Ein eindeutiger Wert für das Primärschlüsselfeld oder das Alternate-Index-Feld muss angegeben werden, wenn der Datensatz mit einem Primärschlüssel oder einem eindeutigen Alternate-Index definiert ist.

Die Klausel `USING/GIVING NUMBER` ist nur bei RRDS oder VRDS gültig. In diesem Fall entspricht die ISN der relativen Datensatznummer.

`USING/GIVING NUMBER` wird verwendet, um einen Datensatz mit einer vom Benutzer vergebenen RRN zu speichern. Wenn ein Datensatz mit der angegeben RRN bereits existiert, wird eine Fehlermeldung zurückgegeben und die Ausführung des Programms abgebrochen, sofern nicht `ON ERROR`-Verarbeitung angegeben wurde.

Die Natural-Systemvariable `*ISN` enthält die RRN, die dem neuen Datensatz als Ergebnis der Ausführung des `STORE`-Statements zugewiesen wurde.

Eine nachfolgende Referenz auf `*ISN` muss die Statement-Nummer des entsprechenden `STORE`-Statement enthalten. `*ISN` ist nur bei RRDS- oder VRDS-Dateien verfügbar.

### UPDATE

Das `UPDATE`-Statement wird verwendet, um ein oder mehrere Felder eines Datensatzes in einer Datenbank zu aktualisieren. Der zu aktualisierende Datensatz muss zuvor mit einem `FIND`- oder `READ`-Statement ausgewählt worden sein.

Der Primärschlüssel kann nicht aktualisiert werden.

## Natural-Transaktionslogik im Zusammenhang mit VSAM

Natural for VSAM verwendet die Transaktionslogik der Umgebung, in der es läuft. Daher unterscheiden sich die Ergebnisse der Natural-Statements `END TRANSACTION` und `BACKOUT TRANSACTION` (siehe auch die entsprechenden Abschnitte in Natural-Statements mit VSAM) je nach der tatsächlichen Umgebung:

- Bei nativem VSAM

- Unter CICS

- Unter DFSMStvs

### Bei nativem VSAM

Da VSAM selbst keine Transaktionslogik besitzt, ist auch keine Transaktionslogik verfügbar, wenn Natural in einer nativen VSAM-Umgebung arbeitet. Dies ist der Fall unter Com-plete, TSO und im Batch-Modus, d.h. wenn `NVSMISC` das verwendete E/A-Modul ist.

Bei `NVSMISC` geben die Statements `END TRANSACTION` und `BACKOUT TRANSACTION` keine Fehlermeldungen zurück, sondern werden von der Natural-Schnittstelle zu VSAM ignoriert.

### Unter CICS

Unter CICS können VSAM-Dateien als "wiederherstellbare Ressourcen" oder für RLS als "wiederherstellbare Sphäre" definiert werden, die alle von CICS unter Verwendung des Konzepts der "logischen Arbeitseinheiten" (Logical Units of Work, LUW) synchronisiert werden. Eine LUW endet, wenn ein `SYNCPOINT`-Kommando ausgegeben wird oder wenn die CICS-Task beendet wird. Einzelheiten finden Sie in der entsprechenden IBM-Literatur über CICS.

Nachfolgend finden Sie Informationen über:

- Modul NVSCICS
- Tasks im Conversational Mode
- Pseudo-Conversational Tasks

#### Modul NVSCICS

Für CICS ist das E/A-Modul `NVSCICS` ein normales Anwendungsprogramm auf Kommandoebene. Es übergibt die Statements `END TRANSACTION` und `BACKOUT TRANSACTION` an den `NATCICS`-Treiber, der die Kommandos `EXEC CICS SYNCPOINT` und `EXEC CICS ROLLBACK` ausgibt. Wenn in einer Natural-Sitzung mit nicht festgeschriebenen Aktualisierungen (Uncommitted Updates) ein Fehler auftritt und keine Fehlertransaktion übergeben wird, veranlasst Natural selbst die Schnittstelle zu VSAM zur Ausgabe eines `ROLLBACK`-Kommandos.

If a `SYNCPOINT` or `ROLLBACK` command fails (for example, when CICS answers with a `ROLLEDBACK` condition to a `SYNCPOINT` request), error messages NAT3544 or NAT3545 are returned.

#### Tasks im Conversational Mode

Wenn die Natural-Sitzung im CICS Conversational Mode läuft, wird die LUW nicht durch eine Terminal-E/A beendet. Natural läuft im Conversational Mode, wenn entweder der Natural-Parameter `PSEUDO=OFF` angegeben wurde oder Natural selbst festgestellt hat, dass eine pseudo-konversationelle Verarbeitung nicht möglich ist.

Da Terminal-Ein-/Ausgaben die Transaktionslogik einer Anwendung nicht stören, solange Natural im Conversational Mode läuft, funktioniert ein Programm wie das folgende ohne Probleme:

#### Example:

    READ vsam-file
     UPDATE
     INPUT ...
    END-READ
    BACKOUT TRANSACTION

#### Pseudo-Conversational Tasks

Wenn die Natural-Sitzung im Pseudo-Conversational Mode läuft, beendet jede Terminal-Ein-/Ausgabe die CICS-Task und führt damit implizit ein `SYNCPOINT`-Kommando aus. Die Auswirkungen eines `BACKOUT TRANSACTION`-Statement, d.h. eines `EXEC CICS SYNCPOINT ROLLBACK`-Kommandos, reichen daher nur bis zur letzten Terminal-Ein-/Ausgabe zurück. Das obige Beispielprogramm würde daher mit der Fehlermeldung NAT3548 enden, weil es nicht möglich ist, alle Aktualisierungen zurückzunehmen.

Anmerkung
Beachten Sie, dass alle Meldungen der Natural-Schnittstelle zu VSAM nur zur Laufzeit ausgegeben werden, da der Natural-Compiler nicht in der Lage ist, diese Art von logischen Fehlern zu erkennen.

### Unter DFSMStvs

DFSMS Transactional VSAM Services (DFSMStvs) bietet die gleichen Funktionen wie CICS: Vorwärts- und Rückwärts-Wiederherstellungsprotokollierung, Backout-Verarbeitung und einen zweistufigen Commit-Prozess. Eine LUW endet, wenn der RRS-Aufruf (Resource Recovery Service) `SRRCMIT` oder `SRRBACK` ausgegeben wird (`END TRANSACTION` oder `BACKOUT TRANSACTION`). Einzelheiten finden Sie in der entsprechenden IBM-Literatur zu DFSMStvs und RRS.

### On this page

- Natural-Statements mit VSAM
- Natural-Transaktionslogik im Zusammenhang mit VSAM