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:
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.
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.
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).
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.
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
|
*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.
Dasselbe gilt für |
*COUNTER |
Die Systemvariable
*COUNTER
enthält die Anzahl der Aufrufe der Verarbeitungsschleife.
Diese Systemvariable ist beim Statement
|
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.
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.
Das GET
SAME
-Statement gilt nur für VSAM ESDS, RRDS und VRDS (siehe
auch das GET
-Statement weiter oben).
Das GET TRANSACTION
DATA
-Statement ist nicht bei der Natural-Schnittstelle zu
VSAM anwendbar.
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.
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.
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.
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 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:
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 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:
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.
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:
READ vsam-file UPDATE INPUT ... END-READ BACKOUT TRANSACTION
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.
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.