READLOB |
[IN ] [FILE ] view-name |
|||||
[PASSWORD =operand2]
|
||||||
[CIPHER =operand3]
|
||||||
[[WITH ]
ISN [=]
operand4]
|
||||||
[[STARTING ]
[AT ] OFFSET
[=] operand5]
|
||||||
statement | ||||||
END-READLOB |
(structured mode only) | |||||
LOOP |
(reporting mode only) |
Dieses Dokument behandelt folgende Themen:
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Verwandte Statements: READ
| FIND
| GET
Gehört zur Funktionsgruppe: Datenbankzugriffe und Datenbankänderungen
Das Statement READLOB
wird bei einem einzelnen
Datensatz verwendet, bei dem das definierte LOB-Feld (LOB = Large OBject)
während der Schleifenausführung in festgelegten Segmenten gelesen wird.
Zu Beginn der Schleife wird der Versatz (Offset) innerhalb des LOB-Feldes gesetzt, ab dem die ersten Daten gelesen werden sollen. Bei der nächsten Schleifen-Iteration wird das Segment zurückgegeben, das auf das zuletzt gelesene Segment folgt. Wenn das Ende der LOB-Daten erreicht ist, wird die Schleife beendet.
Dieses Statement leitet eine Verarbeitungsschleife ein. Siehe auch Schleifenverarbeitung im Leitfaden zur Programmierung.
Das Statement READLOB
kann nur für den Zugriff auf
Adabas-Datenbanken benutzt werden.
Operanden-Definitionstabelle:
Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1
|
C | S | N | P | I | B * | ja | nein | ||||||||||||
operand2
|
C | S | A | ja | nein | |||||||||||||||
operand3
|
C | S | N | ja | nein | |||||||||||||||
operand4 |
C | S | N | P | I | B * | ja | nein | ||||||||||||
operand5 |
C | S | N | P | I | B * | ja | nein |
* Format B von operand1
,
operand4
und
operand5
kann mit einer Länge von
kleiner gleich 4 benutzt werden.
Syntax-Element-Beschreibung:
Syntax-Element | Beschreibung |
---|---|
operand1 |
Anzahl der zu lesen
LOB-Segmente:
Die Anzahl der durchzuführenden Schleifenverarbeitungen
kann durch Angabe von Beispiel: READLOB (5) IN FILE VIEW01 ... #CNT := 10 READLOB (#CNT) IN FILE VIEW01 ... Für dieses Statement hat das hier angegebene Limit Vorrang
vor einem Limit, welches mit dem Anmerkung: |
ALL |
ALL-Option:
Sie können wahlweise das Schlüsselwort Wenn Sie |
view-name |
View-Name:
Als
|
PASSWORD- und
CIPHER-Klauseln:
Die Die |
|
WITH
ISN=operand4 |
WITH ISN-Option:
Diese Option dient zur Angabe der internen Folgenummer
(ISN) des Datensatzes, auf den das
Anmerkung: Wird diese Option nicht angegeben, dann wird standardmäßig
das |
STARTING AT
OFFSET=operand5 |
STARTING AT OFFSET-Klausel:
Dient zur Angabe des Start-Offset innerhalb des
LOB-Feldes, d.h., ab wo das Lesen des ersten Segments beginnen soll. Das erste
Byte des LOB-Feldes hat den Versatz Null (
Wird die Klausel nicht angegeben, dann wird Null
( Siehe auch *NUMBER während der Schleifenverarbeitung, die im Abschnitt Bei READLOB vorhandene Systemvariablen weiter unten beschrieben wird. |
END-READLOB |
Ende des READLOB-Statements:
Im Structured Mode muss das für Natural reservierte
Schlüsselwort Im Reporting Mode wird das Natural-Statement
|
LOOP |
Beim READLOB
-Statement stehen die
Natural-Systemvariablen *ISN
,
*COUNTER
und *NUMBER
zur Verfügung.
Format/Länge dieser Systemvariablen ist P10. Die Format/Länge-Werte können nicht geändert werden.
In der folgenden Tabelle wird die Verwendung dieser
Natural-Systemvariablen in Verbindung mit dem READLOB
-Statement
erläutert:
Systemvariable | Erläuterung | |||
---|---|---|---|---|
*ISN |
Enthält die Adabas-interne Folgenummer
(ISN) des Datensatzes, der zurzeit verarbeitet wird. Das mit einem
READLOB -Statement immer auf denselben Datensatz zugreift, bleibt
der von der Systemvariablen über alle Schleifen-Iterationen zurückgegebene Wert
immer derselbe.
|
|||
*COUNTER |
Enthält die Anzahl der durchlaufenen Verarbeitungsschleifen. | |||
*NUMBER |
Diese Systemvariable wird zweifach verwendet: | |||
|
||||
Falls ein konsekutives Lesen über ein
LOB-Feld angefordert wird, darf der *NUMBER -Wert
innerhalb des READLOB -Statements nicht geändert werden, da
*NUMBER den Offset für die exakte Fortsetzung mit
dem nächsten Segment in der darauffolgenden Schleifen-Iteration enthält. Falls
jedoch eine Fortsetzung an einer anderen Stelle innerhalb des LOB-Feldes
(Neupositionierung) gewünscht wird, können Sie den
*NUMBER -Wert auf diesen Offset ändern. Wird
*NUMBER zurückgesetzt, hat dies zur Folge, dass
das nächste Segment vom LOB-Anfang kommt. Wird
*NUMBER um
(n) erhöht, wird die entsprechende
Anzahl Bytes bei der LOB-Feldverarbeitung übersprungen.
|
Das READLOB
-Statement liest den Datensatz immer
ohne Hold (Sperre). Um die Stabilität der LOB-Daten während der Durchsuchung
des Feldes durch das READLOB
-Statement sicherzustellen (d.h. zur
Vermeidung einer Aktualisierung durch andere Benutzer), kann der Datensatz mit
dem Datenbank-Statement, welches den ISN-Wert liefert, in den Hold-Status
gesetzt werden, und zwar
in einen Exclusive Hold bedingt durch ein
UPDATE
- oder DELETE
-Statement, welches sich auf ein
äußeres READ
- oder FIND
-Statement bezieht, oder
in einen Shared Hold mit einer IN SHARED
HOLD
-Option, die in einem READ
- oder
FIND
-Statement angewendet wird.
Da das READLOB
-Statement den Datensatz immer ohne
Hold (Sperre) liest, darf sich ein UPDATE
-, DELETE
-
oder GET SAME
-Statement nicht auf ein
READLOB
-Statement beziehen.
Beispiel 2 - Datensatznummer über benutzerdefinierte Variable holen
Beispiel 3 - Datensatznummer aus der READ-Schleife holen/ mit Exclusive Hold)
DEFINE DATA LOCAL 1 VIEW01 VIEW OF .. 2 NAME 2 L@LOBFIELD 1 VIEW02 VIEW OF .. 2 LOBFIELD_SEGMENT /* LOB field defined in DDM with (A1000). END-DEFINE * READ VIEW01 BY NAME = 'SMITH' /* Outer statement reads all demanded record /* fields, except the LOB field. IN SHARED HOLD MODE=Q /* Set record into shared hold to enforce LOB /* data stability during READLOB. DISPLAY NAME 'Total-length LOB-field' L@LOBFIELD READLOB VIEW02 /* Record number used from active record of /* READ statement. /* LOB is read in segments with length 1000. STARTING AT OFFSET = 2000 /* Start to read the LOB field at byte 2000. WRITE 'Loop counter:' *COUNTER 10X ' Next offset:' *NUMBER PRINT VIEW02.LOBFIELD_SEGMENT END-READLOB END-READ END
DEFINE DATA LOCAL 1 #ISN (I4) 1 #CNT (I4) 1 #OFF (I4) 1 VIEW02 VIEW OF .. 2 LOBFIELD_SEGMENT /* LOB field defined in DDM with (A1000). END-DEFINE * INPUT (AD=T) / ' Read record (ISN):' #ISN / 'Number of segments:' #CNT / ' Start at offset:' #OFF * READLOB (#CNT) VIEW02 /* Read max. (#CNT) segments with length 1000. WITH ISN = #ISN /* Record number provided by user. /* Record is not in hold. STARTING AT OFFSET = #OFF /* Start to read the LOB field at byte (#OFF). WRITE 'Loop counter:' *COUNTER 10X ' Next offset:' *NUMBER PRINT VIEW02.LOBFIELD_SEGMENT END-READLOB END
DEFINE DATA LOCAL 1 VIEW01 VIEW OF .. 2 NAME 1 VIEW02 VIEW OF .. 2 LOBFIELD_SEGMENT /* LOB field defined in DDM with (A1000). END-DEFINE * R1. READ VIEW01 BY NAME = 'SMITH' /* Outer statement reads all demanded record fields, /* except the LOB field. DISPLAY NAME READLOB VIEW02 /* Record number used from active record of READ stmt. /* LOB is read in segments with length 1000. STARTING AT OFFSET = 2000 /* Start to read the LOB field at byte 2000. WRITE 'Loop counter:' *COUNTER 10X ' Next offset:' *NUMBER PRINT VIEW02.LOBFIELD_SEGMENT END-READLOB ... UPDATE (R1.) /* Set record into exclusive hold that enforces LOB /* data stability during READLOB. END OF TRANSACTION END-READ END