ISAM: | Makrotyp: | R bei PARMOD=24 |
SAM: | Makrotyp: | R bei PARMOD=24 |
Anwendungsbereich
Die Funktion GET ist bei der Dateiverarbeitung mit SAM oder ISAM (satzorientierte Zugriffsmethoden) möglich. Die Datei muss dabei mit einem der folgenden OPEN-Modi eröffnet worden sein:
INPUT (SAM oder ISAM)
INOUT (ISAM)
OUTIN (ISAM)
UPDATE (SAM)
Funktion
Durch die Funktion GET wird dem Aufrufer ein Satz der Datei zur Verfügung gestellt. Es wird dabei immer der Satz bereitgestellt, den der aktuelle Satzzähler referenziert. Nach einem OPEN INPUT ist dieser Zähler 1. Eine Folge von GET-Aufrufen liest somit die Sätze der Datei sequenziell (vgl. GETKY, GETFL, GETR bei ISAM).
Ein GET-Aufruf setzt nicht jedes Mal einen SVC ab. Ein SVC wird nur dann abgesetzt, wenn der nächste zu lesende Satz nicht mehr im aktuellen Pufferbereich steht.
Wird ein Satz angefordert, der außerhalb der Datei liegt, erkennt das DVS „Dateiende“. Es verzweigt zur EOFADDR-Adresse (siehe Makro EXLST, "EXLST - Exit-Adressenliste anlegen") und übergibt dem Anwender die Steuerung.
Bereitstellungsmodi
Der Aufrufer kann eine Datei in zwei Modi verarbeiten, die für GET wesentlich sind:
Im LOCATE-Modus (Ortungsmodus) wird vom System der Satz in einen Pufferbereich des Systems übertragen (Operand IOREG). Der Aufrufer erhält in einem von ihm spezifizierten Register die Adresse des Satzanfangs. Eine Übertragung in den Programmbereich findet nicht statt (vgl. MOVE-Modus).
Im MOVE-Modus stellt der Aufrufer in seinem Programm einen Bereich zur Verfügung, in den das System den Satz kopieren kann. Die Adresse dieses Satzbereiches wird über Register 1 dem System beim Aufruf übergeben.
Verändern des Satzzeigers
Der Satzzeiger kann durch Positionierung verändert werden. Dadurch wird die sequenzielle Verarbeitung unterbrochen und an anderer Stelle wieder fortgesetzt : vgl. SETL, SETLKY.
Besonderheiten nur für SAM-Dateien
OPEN UPDATE
Im OPEN-Modus UPDATE werden mit GET die zu aktualisierenden Sätze gelesen. PUTX verändert den Satz, führt jedoch nicht zu einem Schreibauftrag. Es wird vielmehr nur ein Kennzeichen im FCB gesetzt, dass dieser Satz noch geschrieben werden muss. Der eigentliche Schreibauftrag erfolgt erst mit einem folgenden GET, RELSE,SETL; PUTX setzt keinen SVC ab.
Banddatei und Blockung
Bei Banddateien im Format PAMKEY und hoher Blockung (STD,n) kommt es zu einer Verlängerung der I/O. Es ist hier ratsam, auf NON-KEY-Format oder BLKSIZE=länge umzusteigen.
Die Zugriffszeit kann gering gehalten werden, wenn große Pufferbereiche benutzt werden. SAM kettet dann seinerseits aufeinander folgende PAM-Seiten (gekettete Ein-/ Ausgabe). Ein merklicher Zeitgewinn ist jedoch nur für solche Dateien zu erwarten, die weitgehend zusammenhängenden Speicherplatz haben (siehe SPACE-Operand im FILE-Makro, "FILE - Dateimerkmale definieren/Dateiverarbeitung steuern").
Ein GET-Makroaufruf führt nur dann zu einem SVC, wenn eine Pufferübertragung ausgelöst wird. Der Anwender kann daher nicht erwarten, bei jedem GET-Aufruf die Kontrolle in einem STXIT-Prozess zu bekommen (bei Verwendung des STXIT-Makroaufrufs mit SVC oder SVCLIST. Näheres siehe Handbuch „Makroaufrufe an den Ablaufteil“ [2]).
Die PUTX Verarbeitung „merkt“ sich im TU-FCB, dass im aktuellen Puffer ein Satz aktualisiert worden ist. Wenn beim nächsten GET (RELSE, SETL) dieses Bit gesetzt ist, dann erst wird der ganze logische Block auf Platte geschrieben. Der PUTX setzt nie einen SVC ab.
Besonderheiten nur für ISAM-Dateien
Lesen über Primärschlüssel:
Bei ISAM-Dateien wird die logische Folge der Sätze durch Primärschlüssel definiert. Mit einer Folge von GET-Aufrufen werden die Sätze sequenziell im Sinne aufsteigender Primärschlüssel gelesen.
Durch einen SETLKEY kann auf einen bestimmten Primärschlüssel positioniert werden Ein folgender GET liefert dann diesen Satz.
Lesen über Sekundärschlüssel:
Bei der Verarbeitung einer NK-ISAM-Datei kann auch über die Angabe eines Sekundärschlüssels gelesen werden. Existieren zu einem Primärschlüssel mehrere Sätze mit identischen Sekundärschlüsseln (DUPEKEY), so werden diese Sätze durch GET-Aufrufe in der zeitlichen Reihenfolge ihres Entstehens geliefert.
Enthält die Datei Sätze mit gleichen Primärschlüsseln, werden sie in der Reihenfolge geliefert, in der sie in die Datei eingefügt wurden.
Wenn die Datei sequenziell über einen Sekundärschlüssel gelesen wird, so werden Sätze mit gleichen Sekundärschlüsselwerten in der Reihenfolge bereitgestellt, in der die Sekundärschlüsselwerte entstanden sind.
Wird mit SETL KEY auf einen existierenden Satz positioniert, stellt ein nachfolgender GET diesen Satz zur Verfügung.
Format
Operation | Operanden |
|
|
Operandenbeschreibung
fcbadr
Adresse des FCB der zu verarbeitenden Datei.
Nur für ISAM-Dateien:
Wenn die Datei über einen Sekundärschlüssel gelesen werden soll, muss dieser FCB in seiner 31-Bit-Schnittstelle vorliegen.
(1)
Die FCB-Adresse steht im Register 1.
area
Adresse des Feldes, in das der Satz gebracht werden soll, wenn die Verarbeitung im Move-Mode erfolgt. Im Locate-Mode wird „area“ ignoriert.
(0)
Die Adresse des Feldes, in das der Satz gebracht werden soll, steht im Register 0.
LOCK
Nur für ISAM-Dateien:
Die Satz- oder Datenblocksperre bleibt nach Ausführung des Makroaufrufs erhalten (explizite Sperre).
NOLOCK
Es wird keine explizite Sperre gesetzt.
AIX
Nur für ISAM-Dateien:
Gibt an, ob der Satz über seinen Primär- oder einen Sekundärschlüssel bereitgestellt werden soll.
= NO
Der Satz wird über seinen Primärschlüssel bereitgestellt.
= YES
Kann nur angegeben werden, wenn
die 31-Bit-Schnittstelle des Makros generiert wird (über den Operanden PARMOD=31 oder den Makroaufruf GPARMOD 31) und
der Makro sich auf einen 31-Bit-FCB bezieht.
Der Satz wird über den im Operanden KEYNAME oder KEYNMAD vereinbarten Sekundärschlüssel bereitgestellt.
KEYNAME = name
Nur für ISAM-Dateien:
Gibt den Namen des Sekundärschlüssels an, über den der Satz gelesen werden soll. name muss der Name eines für die aktuelle Datei vereinbarten Sekundärschlüssels sein. Die Namen aller für eine Datei definierten Sekundärschlüssel können mit dem Makro SHOWAIX oder dem Kommando SHOW-INDEX-ATTRIBUTES ermittelt werden.
KEYNMAD = adr
Nur für ISAM-Dateien:
Gibt die symbolische Adresse (den Namen) eines Feldes an, in dem der Anwender den Namen des Sekundärschlüssels hinterlegt hat, über den der Satz gelesen werden soll.
Das Feld mit der symbolischen Adresse adr muss zum Zeitpunkt der Makroausführung den Namen eines für die aktuelle Datei vereinbarten Sekundärschlüssels enthalten.
PARMOD
Gibt den Generierungsmodus an.
Voreinstellung: | der durch den Assembler oder den GPARMOD-Makroaufruf im Programm eingestellte Wert |
= 24
Es wird ein Objekt erzeugt, das nur im 16-MB-Adressraum ablauffähig ist (nur 24-Bit-Adressierung).
= 31
Es wird ein Objekt erzeugt, das im 2-GB-Adressraum ablauffähig ist (24-Bit- oder 31-Bit-Adressierung).
Hinweis zur Programmierung
Der GET-Makroaufruf zerstört die Register 0, 1, 14 und 15.