Dieser Abschnitt behandelt folgende Themen:
Verwandte Statements: ACCEPT/REJECT |
AT BREAK | AT START OF DATA | AT END OF DATA | BACKOUT TRANSACTION | BEFORE
BREAK PROCESSING | DELETE | END
TRANSACTION | FIND |
GET | GET SAME |
GET TRANSACTION | HISTOGRAM | LIMIT | PASSW | PERFORM BREAK
PROCESSING | READ |
RETRY | STORE | UPDATE
Gehört zur Funktionsgruppe: Datenbankzugriffe und Datenbankänderungen
Das Statement FIND dient dazu, Datensätze von der Datenbank auszuwählen, und
zwar anhand eines Suchkriteriums, d.h. des Wertes eines Schlüsselfeldes (Deskriptors).
Mit dem FIND-Statement wird eine Verarbeitungsschleife initiiert, die für
jeden gefundenen Datensatz durchlaufen wird. Innerhalb der FIND-Schleife kann
jedes Feld eines gefundenen Datensatzes referenziert werden, und zwar ohne dass hierzu ein
zusätzliches READ-Statement erforderlich
wäre.
Siehe auch folgende Abschnitte im Leitfaden zur Programmierung.
Die Natural-Systemvariablen *ISN, *NUMBER und
*COUNTER werden automatisch für jedes
FIND-Statement erzeugt. Wird eine Systemvariable außerhalb der aktuellen
Verarbeitungsschleife oder über ein FIND
FIRST-, FIND
NUMBER- oder FIND
UNIQUE-Statement referenziert, muss mittels Statement-Label oder
Quellcode-Zeilennummer referenziert werden. Alle drei Systemvariablen haben Format/Länge
P10; diese(s) Format/Länge kann nicht geändert werden.
| Systemvariable | Erläuterung |
|---|---|
*ISN |
|
*NUMBER |
Siehe Bei Entire System Server und Natural Messaging ist
|
*COUNTER |
Der in *COUNTER enthaltene Wert ist die
Anzahl, wie oft die Verarbeitungsschleife durchlaufen worden ist.
|
Siehe auch Beispiel 13 - Sytemvariablen mit dem FIND-Statement benutzen.
Es ist möglich, mehrere FIND-Schleifen ineinander zu verschachteln.
Hierbei wird eine jeweils innere Schleife für jeden Datensatz, der mit der jeweils
äußeren Schleife ausgewählt wurde, durchlaufen. Siehe auch Beispiel 14 - Mehrere
FIND-Statements.
Mit Entire System Server und Natural Messaging sind FIND NUMBER und FIND
UNIQUE sowie die Klauseln PASSWORD, CIPHER, COUPLED und RETAIN nicht zulässig.
FIND
|
|
|
|
|
[MULTI-FETCH-clause] [RECORDS] [IN]
[FILE]
view-name
|
|||||||
[PASSWORD=operand2]
|
||||||||||||
[CIPHER=operand3]
|
||||||||||||
[WITH] [[LIMIT] (operand4)]
basic-search-criteria
|
||||||||||||
| [COUPLED-clause] |
||||||||||||
[STARTING WITH
ISN=operand5]
|
||||||||||||
| [SORTED-BY-clause] | ||||||||||||
| [RETAIN-clause] | ||||||||||||
[[IN] SHARED HOLD
[MODE=option]]
|
||||||||||||
[SKIP [RECORDS] IN
HOLD]
|
||||||||||||
| [WHERE-clause] | ||||||||||||
| [IF-NO-RECORDS-FOUND-clause] | ||||||||||||
|
statement
|
||||||||||||
END-FIND
|
[(r)] | (structured mode only) | ||||||||||
LOOP |
[(r)] | (reporting mode only) | ||||||||||
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
FIND
|
|
|
|
|
[RECORDS] [IN]
[FILE]
view-name
|
|||||||
[PASSWORD=operand2]
|
||||||||||||
[CIPHER=operand3]
|
||||||||||||
[WITH] [[LIMIT] (operand4)]
basic-search-criteria
|
||||||||||||
| [COUPLED-clause] |
||||||||||||
| [SORTED-BY-clause] | (only for FIND FIRST) | |||||||||||
| [RETAIN-clause] | ||||||||||||
| [WHERE-clause] | ||||||||||||
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
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 nur mit einer Länge von kleiner oder gleich 4 benutzt werden.
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung | ||
|---|---|---|---|
ALL/operand1 |
Begrenzung der Verarbeitung:
Sie können die Anzahl der ausgewählten Datensätze, die in der
Andernfalls werden alle gefundenen Sätze weiterverarbeitet, was Sie zusätzlich
durch das Schlüsselwort Geben Sie mit operand1 ein Limit an, so gilt dieses
Limit für die initiierte FIND (5) IN EMPLOYEES WITH ... MOVE 10 TO #CNT(N2) FIND (#CNT) EMPLOYEES WITH ... Das angegebene Limit hat für dieses Statement Vorrang vor einem mit einem
Ist mit dem Anmerkungen:
|
||
FIND FIRST | FIND
NUMBER | FIND UNIQUE |
Suchoptionen:
Diese Optionen dienen dazu
|
||
MULTI-FETCH-clause |
Multi-Fetch-Klausel:
Bei Adabas-Datenbanken: Im Standard-Modus liest Natural nicht mehrere Datensätze auf einmal bei einem einzigen Datenbankaufruf, sondern jeweils nur einen. Diese stabile Betriebsart kann aber einige Zeit in Anspruch nehmen, wenn eine größere Anzahl von Datenbank- Sätzen verarbeitet wird. Um die Leistung dieser Programme zu verbessern, bietet Natural die
Weitere Informationen, siehe MULTI-FETCH-Klausel weiter unten. |
||
view-name |
View-Angabe:
Der Name eines Views, der entweder in einem Im Reporting Mode ist view-name der Name eines
DDM, falls kein
|
||
PASSWORD=operand2 |
PASSWORD-Klausel:
Die Mit Entire System Server und Natural Messaging ist diese Klausel nicht erlaubt. Die Wenn das Passwort als Konstante angegeben wird, sollte die
Im TP-Modus können Sie die Wenn Sie die Während der Ausführung einer Verarbeitungsschleife kann das Passwort nicht geändert werden. Siehe auch Beispiel 1 - PASSWORD-Klausel. |
||
CIPHER=operand3 |
CIPHER-Klausel:
Die Mit Entire System Server und Natural Messaging ist diese Klausel nicht erlaubt. Die Der Chiffrierschlüssel kann als numerische Konstante (8 Stellen lang) oder als Inhalt einer Benutzervariablen (Format/Länge N8) angegeben werden. Wird der Chiffrierschlüssel als Konstante angegeben, sollte die
Im TP-Modus können Sie die Während der Ausführung der Siehe auch Beispiel 2 - CIPHER-Klausel. |
||
WITH LIMIT
operand4
basic-search-criterion
|
WITH-Klausel:
Die Datenbank-spezifische Hinweise:
Die Anzahl der Datensätze, die anhand des in der Anmerkung: |
||
COUPLED-clause |
COUPLED-Klausel:
Diese Klausel gilt nur für Such-Zugriffe auf Adabas-Dateien. Siehe COUPLED-Klausel. |
||
STARTING WITH
ISN=operand5 |
STARTING WITH-Klausel:
Diese Klausel kann zum Repositionieren innerhalb einer
Siehe STARTING WITH-Klausel. |
||
SORTED-BY-clause |
SORTED BY-Klausel:
Diese Klausel dient dazu, die ausgewählten Datensätze in der Reihenfolge der Werte eines oder mehrerer (maximal 3) Deskriptoren zu sortieren. Siehe SORTED BY-Klausel. |
||
RETAIN-clause |
RETAIN-Klausel:
Mit dieser Klausel ist es möglich, das Ergebnis einer ausgedehnten Suche in einer großen Datei für die weitere Verarbeitung zurückzustellen. Siehe RETAIN-Klausel. |
||
[[IN]
SHARED HOLD [MODE=option]] |
SHARED HOLD-Klausel:
Anmerkung: Mit dieser Option können Sie die zurzeit gelesenen Datensätze in einen "Shared Hold"-Status setzen. Ein Datensatz kann durch viele Benutzer gleichzeitig in den "Shared Hold"-Status gesetzt werden. Solange sich ein Datensatz im "Shared Hold"-Status befindet, ist er vor Änderungen geschützt, weil er nicht durch zeitgleich arbeitende Benutzer in einen "Exclusive Hold"-Status gesetzt werden kann. Dadurch wird die Datenkonsistenz für die Daten des Datensatzes sichergestellt, weil niemand den Datensatz ändern kann, während er sich in Verarbeitung befindet. Insbesondere wenn auf denselben Datensatz mit mehreren Statements zugegriffen
wird, um verschiedene MU-/PE-Ausprägungen zu lesen ( Obwohl ein solcher Hold-Status eine effiziente Art ist, Leseabfolgen zu
schützen, ist es dennoch eine grundlegende und wichtige Angelegenheit, den
Datensatz aus dieser sanften Sperre wieder freizugeben. Da dies von
individuellen Aspekten der Anwendung abhängt, besteht die Möglichkeit, mit Hilfe
der |
||
|
MODE-Option
|
Sperrzeitraum
|
Erläuterung
|
|
C |
Nur zum Zeitpunkt des Lesens des Datensatzes; | Stellt sicher, dass die zurzeit gelesene Version des Datensatzes durch den letzten Änderer festgeschrieben worden ist. Diese Option setzt nicht wirklich eine Sperre, sondern prüft nur, ob der Datensatz zum Zeitpunkt des Lesens nicht durch einen anderen Benutzer in einem "Exclusive Hold"-Status gehalten wird. | |
Q |
solange bis der nächste Datensatz in einer Abfolge gelesen ist; | Gibt den Datensatz aus dem "Shared Hold"-Status
frei, wenn
|
|
S |
bis die logische Transaktion beendet ist. | Gibt den Datensatz aus dem "Shared Hold"-Status
frei, wenn eine logische Transaktion mit einem END TRANSACTION- oder BACKOUT TRANSACTION-Statement beendet wird.
|
|
MODE=Q und MODE=S
stellen sicher, dass der zurzeit gelesene Datensatz solange nicht gleichzeitig
durch andere Benutzer geändert werden kann, bis er wieder aus dem Hold-Status
freigegeben worden ist.
Falls die Siehe auch Beispiel 15 - SHARED HOLD-Klausel weiter unten. |
|||
SKIP RECORDS IN
HOLD |
SKIP RECORDS-Klausel:
Anmerkung: Immer wenn ein im Hold befindlicher Datensatz gelesen werden soll, kann ein
Natural-Fehler NAT3145 (Adabas-Rückmeldeschlüssel Gewiss ist der Natural-Fehler NAT3145 die angemessene Reaktion, um eine einwandfreie Datenverarbeitung sicherzustellen, jedoch kann es gelegentlich von Nutzen sein, dass ein im Hold befindlicher Datensatz übersprungen werden kann. Wenn es in Ordnung ist, dass ein solcher Datensatz nicht bearbeitet und die
Schleifenverarbeitung fortgesetzt wird, sollte die Wenn die Wenn die Fehlersituation für einen Natural-Fehler NAT3145 eintrifft, dann
Die Siehe auch Beispiel 16 - SKIP RECORDS-Klausel. |
||
WHERE-clause |
WHERE-Klausel:
Diese Klausel dient dazu, ein zusätzliches Selektionskriterium (logical-condition) anzugeben. Siehe WHERE-Klausel. |
||
IF-NO-RECORDS-FOUND-clause |
IF NO RECORDS FOUND-Klausel:
In dieser Klausel können Sie eine Schleife angeben, die mit einem
Siehe IF NO RECORDS FOUND-Klausel. |
||
END-FIND
(r)
|
Ende des FIND-Statements:
Im Structured Mode ohne Verarbeitungsschleife muss dass für Natural reservierte
Schlüsselwort Im Structured Mode können Sie bei Beispiel: FD. FIND EMPLOYEES-VS WITH PERSONNEL-ID = '11100112' DISPLAY PERSONNEL-ID NAME END-FIND (FD.) 0150 FD. FIND MYVIEW2 WITH PERSONNEL-ID = ‘11000999’ 0160 DISPLAY NOTITLE NAME 0170 FIRST-NAME (0150) 0180 MAKE (FD.) 0190 END-FIND (0150) Im Reporting Mode mit Verarbeitungsschleife wird das Natural-Statement
Im Reporting Mode können Sie bei |
||
LOOP
(r)
|
|||
Das FIND FIRST-Statement dient dazu, den ersten Datensatz, der die
WITH- und WHERE-Selektionskriterien erfüllt,
auszuwählen und zu verarbeiten.
Bei Adabas-Dateien wird derjenige der ausgewählten Datensätze verarbeitet, der die niedrigste Adabas-ISN (Interne Satznummer) hat.
FIND FIRST initiiert keine Verarbeitungsschleife.
FIND FIRST darf nur im Reporting Mode verwendet werden.
FIND FIRST ist beim Zugriff auf SQL-Datenbanken nicht möglich.
Beim FIND FIRST-Statement stehen folgende Natural-Systemvariablen zur
Verfügung:
| Systemvariable | Erläuterung |
|---|---|
*ISN
|
Die Systemvariable *ISN enthält die Adabas-ISN
(Interne Satznummer) des ausgewählten Datensatzes.
*ISN enthält den Wert Null (0), wenn kein
Datensatz die WITH- und
WHERE-Selektionskriterien erfüllt.
Mit Entire System Server und Natural Messaging ist diese Klausel nicht erlaubt. |
*NUMBER
|
Die Systemvariable *NUMBER enthält die Anzahl der
Datensätze, die vor Auswertung des WHERE-Kriteriums das in der WITH-Klausel angegebene primäre
Selektionskriterium erfüllt haben. *NUMBER enthält
den Wert Null (0), wenn kein Datensatz das WITH-Kriterium erfüllt.
Mit Entire System Server und Natural Messaging kann
|
*COUNTER
|
Die Systemvariable *COUNTER enthält 1,
wenn ein Datensatz gefunden wurde, sie enthält 0, wenn kein
Datensatz gefunden wurde.
|
Beispiel für FIND FIRST siehe Programm FNDFIR (Reporting Mode).
Mit dem Statement FIND NUMBER können Sie ermitteln, wieviele Datensätze
die WITH- und WHERE-Kriterien erfüllen. FIND
NUMBER löst keine Verarbeitungsschleife aus und liest auch keine Datensätze
von der Datenbank.
Anmerkung
Eine WHERE-Klausel kann
hierbei einen beträchtlichen Verarbeitungsmehraufwand verursachen.
Im Structured Mode darf keine WHERE-Klausel benutzt werden.
Mit Entire System Server und Natural Messaging kann FIND NUMBER nicht
verwendet werden.
Bei FIND NUMBER stehen folgende Natural-Systemvariablen zur Verfügung:
| Systemvariable | Erläuterung |
|---|---|
*NUMBER
|
Die Systemvariable |
*COUNTER
|
Die Systemvariable
|
Beispiel für FIND NUMBER siehe das Programm FNDNUM (Reporting Mode).
Dieses Statement gewährleistet, dass nur ein einziger Datensatz die Selektionskriterien
erfüllt. FIND UNIQUE initiiert keine Verarbeitungsschleife. Enthält das
FIND UNIQUE-Statement eine WHERE-Klausel, wird zur Auswertung dieser Klausel eine
automatische interne Verarbeitungsschleife durchlaufen.
Wird kein oder mehr als ein Datensatz gefunden, wird eine entsprechende Fehlermeldung
ausgegeben; dieser Fall kann mit einem ON ERROR-Statement abgefangen
werden.
FIND UNIQUE darf nur im Reporting Mode verwendet werden.
FIND UNIQUE ist beim Einsatz von Entire System Server und Natural
Messaging nicht möglich.
Bei SQL-Datenbanken ist FIND UNIQUE nicht erlaubt. (Ausnahme: auf
z/OS-Computern kann FIND UNIQUE für Primärschlüssel verwendet werden;
allerdings ist dies nur aus Kompatibilitätsgründen erlaubt und sollte nicht benutzt
werden.)
| Systemvariable | Erläuterung |
|---|---|
*ISN |
Die Systemvariable *ISN enthält die eindeutige
ISN-Nummer des Datensatzes, der selbst wiederum eindeutig sein muss.
|
*NUMBER |
Die Systemvariable
|
*COUNTER |
Die Systemvariable *COUNTER enthält die Anzahl der
Datensätze nach Auswertung des WHERE-Kriteriums.
|
Beispiel für FIND UNIQUE siehe Programm FNDUNQ (Reporting
Mode).
Anmerkung
Diese Klausel kann nur bei Adabas- oder Db2-Datenbanken benutzt werden.
|
|
MULTI-FETCH |
|
|
|
Weitere Informationen siehe Multi-Fetch-Klausel (Adabas) im Leitfaden zur Programmierung oder Verarbeitung mehrerer Zeilen (SQL) im Natural for Db2-Teil der Database Management System Interfaces-Dokumentation.
1
descriptor
[(i)]
|
|
|
|
value |
|
|
OR |
|
|
|
value |
|
||||
THRU
value
[BUT NOT
value
[THRU
value]]
|
||||||||||||||||
2
descriptor
[(i)]
|
|
|
|
value | ||||||||||||
3
set-name
|
||||||||||||||||
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
descriptor
|
S | A | A | N | P | I | F | B | D | T | L | nein | nein | |||||||
value
|
C | S | A | N | P | I | F | B | D | T | L | ja | nein | |||||||
set-name
|
C | S | A | nein | nein | |||||||||||||||
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung |
|---|---|
descriptor
|
Deskriptor-Feld:
Es kann ein Adabas-Deskriptor, -Subdeskriptor, -Superdeskriptor, -Hyperdeskriptor oder phonetischer Deskriptor angegeben werden. Es kann auch ein im DDM als Nicht-Deskriptor markiertes Feld angegeben werden. |
(i)
|
Index:
Ein Deskriptorfeld, das Teil einer Periodengruppe ist, kann mit oder ohne Index angegeben werden. Wird kein Index angegeben, so wird ein Datensatz ausgewählt, wenn der Suchwert in einer beliebigen Ausprägung gefunden wird. Wird ein Index angegeben, so wird ein Datensatz nur ausgewählt, wenn der Suchwert in der im Index angegebenen Ausprägung gefunden wird. Der Index muss als Konstante angegeben werden; es darf kein Indexbereich angegeben werden. Ist das angegebene Deskriptorfeld ein multiples Feld, darf kein Index angegeben werden. Ein Datensatz wird ausgewählt unabhängig davon, in welcher Ausprägung des Feldes der Suchwert gefunden wird. |
value
|
Suchwert:
Der Suchwert, den das Deskriptorfeld haben soll. Die Formate von Suchwert und Deskriptorfeld müssen kompatibel sein. |
set-name
|
Set-Name:
Identifiziert einen Set von Datensätzen, die mit einem
set-name kann entweder als Textkonstante (bis zu 32 Zeichen lang) oder in Form einer alphanumerischen Variablen angegeben werden. Mit Entire System Server und Natural Messaging kann set-name nicht angegeben werden. |
Siehe auch:
| null-indicator |
|
|
|
value |
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
null-indicator
|
S | I | nein | nein | |||||||||||||||
value
|
C | S | N | P | I | F | B | ja | nein | ||||||||||
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung | |
|---|---|---|
null-indicator
|
Der Null-Indikator. | |
value |
Mögliche Werte
|
Bedeutung
|
-1 |
Das entsprechende Feld enthält keinen Wert. | |
0 |
Das entsprechende Feld enthält einen Wert. | |
Es ist möglich, mehrere Suchkriterien mit den Boole’schen Operatoren AND,
OR und NOT miteinander zu verknüpfen. Mit Klammern kann
außerdem die Reihenfolge der Kriterienauswertung gesteuert werden. Die Auswertung
verknüpfter Suchkriterien geschieht in folgender Reihenfolge:
( ): Klammern
NOT: Negation (nur für
basic-search-criterion der Form [2]).
AND: Und-Verknüpfung
OR: Oder-Verknüpfung
Suchkriterien können mit logischen Operatoren verknüpft werden, um einen komplexen Suchausdruck (search-expression) zu bilden. Eine solcher komplexer Suchausdruck hat folgende Syntax:
[NOT]
|
|
basic-search-criterion |
|
|
|
|
|
search-expression |
|
Siehe auch Beispiel 5 - Mehrere Beispiele für komplexe Suchausdrücke in WITH-Klausel .
Adabas-Benutzer können bei der Suche nach Datensätzen als Suchschlüssel Datenbankfelder verwenden, die als Deskriptoren definiert sind.
Bei Adabas-Datenbanken können für die Konstruktion von Suchkriterien Subdeskriptoren, Superdeskriptoren, Hyperdeskriptoren und phonetische Deskriptoren verwendet werden.
Ein Subdeskriptor ist ein Schlüsselfeld, das Teil eines Feldes ist.
Ein Superdeskriptor ist ein Schlüsselfeld, das aus mehreren Feldern oder Teilfeldern besteht.
Ein Hyperdeskriptor ist ein Schlüsselfeld, das durch einen benutzerdefinierten Algorithmus gebildet wird.
Ein phonetischer Deskriptor ermöglicht die Suche nach einem Feldwert (z.B. der Name einer Person) anhand des Klanges eines Wertes. Bei der Suche mit einem phonetischen Deskriptor werden alle Werte gefunden, die so ähnlich klingen wie der Suchwert.
Bei welcher Datei welche Felder als Deskriptoren, Sub-, Super-, Hyper- und phonetische Deskriptoren verwendet werden können, ist in dem betreffenden DDM definiert.
Die mit Subdeskriptoren, Superdeskriptoren und phonetischen Deskriptoren angegebenen Suchwerte müssen mit dem jeweiligen internen Format kompatibel sein: ein Subdeskriptor hat dasselbe interne Format wie das Feld, von dem er ein Teil ist; ein phonetischer Deskriptor hat immer alphanumerisches Format; das interne Format eines Superdeskriptors ist binär, falls alle Felder, aus denen er sich zusammensetzt, numerisches Format haben; andernfalls ist sein internes Format alphanumerisch.
Werte für Sub- und Superdeskriptoren können wie folgt angegeben werden:
als numerische oder hexadezimale Konstanten; hat ein Superdeskriptor binäres Format (vgl. oben), muss eine numerische oder hexadezimale Konstante als Wert angegeben werden;
als Werte von Benutzervariablen, die mit einem REDEFINE-Statement
redefiniert wurden, um die Teile auszuwählen, die den Sub- bzw.
Superdeskriptorwert darstellen.
Ein Deskriptor, der Teil eines Datenbank-Arrays ist, kann ebenfalls als Suchfeld verwendet werden. Bei Adabas-Dateien kann dies ein multiples Feld sein oder ein Feld, das in einer Periodengruppe enthalten ist.
Ein Deskriptorfeld, das Teil einer Periodengruppe ist, kann entweder mit oder ohne Index angegeben werden. Wird kein Index angegeben, so wird ein Datensatz ausgewählt, wenn der Suchwert in irgendeiner Ausprägung gefunden wird. Wird ein Index angegeben, so wird ein Datensatz nur ausgewählt, wenn der Suchwert in der im Index angegebenen Ausprägung gefunden wird. Der Index muss als Konstante angegeben werden. Es darf kein Indexbereich angegeben werden.
Ist das angegebene Deskriptorfeld ein multiples Feld, darf kein Index angegeben werden. Ein Datensatz wird ausgewählt unabhängig davon, in welcher Ausprägung des Feldes der Suchwert gefunden wird.
Siehe auch Beispiel 5 - Mehrere Beispiele für komplexe Suchausdrücke in WITH-Klausel.
1
|
descriptor |
|
|
|
value | ||
2
|
descriptor |
|
|
|
value
THRU
value
|
||
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
descriptor
|
S | A | A | N | P | B | nein | nein | |||||||||||
value
|
C | S | A | N | P | B | ja | nein | |||||||||||
Syntax-Element-Beschreibung:
Die Formate des Deskriptors (descriptor) und des Suchwerts (value) müssen kompatibel sein.
Diese Klausel gilt nur für Zugriffe auf Adabas-Dateien.
Mit Entire System Server und Natural Messaging ist diese Klausel nicht zulässig.
|
|
|
|
COUPLED
|
[TO] [FILE] view-name
|
||||||
|
|
VIA
descriptor1
|
|
|
|
descriptor2 |
|
||||
[WITH]
basic-search-criteria
|
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
descriptor1
|
S | A | A | N | P | B | nein | nein | |||||||||||
descriptor2
|
S | A | A | N | P | B | nein | nein | |||||||||||
Anmerkung
Ohne VIA-Klausel kann die COUPLED-Klausel bis zu viermal
angegeben werden, mit VIA-Klausel bis zu 42-mal.
Adabas bietet die Möglichkeit, Dateien miteinander zu koppeln. Dadurch ist es mit der
COUPLED-Klausel möglich, im Suchkriterium eines einzigen
FIND-Statements Deskriptoren von verschiedenen Dateien anzugeben.
Zwei verschiedene COUPLED-Klauseln desselben FIND-Statements
dürfen nicht dieselbe Adabas-Datei verwenden.
Ein set-name (siehe RETAIN-Klausel) darf nicht im Suchkriterium (basic-search-criteria) angegeben werden.
Datenbankfelder der in der COUPLED-Klausel angegebenen Datei können
anschließend im Programm nicht referenziert werden, wenn auf diese Datei kein separater
FIND- oder READ-Zugriff erfolgt.
Anmerkung
Wenn die COUPLED-Klausel verwendet wird, kann die
Haupt-WITH-Klausel gegebenenfalls weggelassen werden. Wenn die
Haupt-WITH-Klausel weggelassen wird, dürfen die Schlüsselwörter
AND/OR in der COUPLED-Klausel nicht angegeben
werden.
Die in der COUPLED-Klausel ohne VIA verwendeten Dateien
müssen mit der entsprechenden Adabas-Utility physisch gekoppelte Adabas-Dateien sein
(wie in der Adabas-Dokumentation beschrieben).
Siehe auch Beispiel 7 - Physisch gekoppelte Dateien benutzen.
Die Referenzierung von NAME im DISPLAY-Statement ist gültig,
da dieses Feld in der Datei EMPLOYEES (Angestellte) enthalten ist; eine
Referenzierung von MAKE (Fabrikat) hingegen wäre nicht gültig, da
MAKE in der Datei VEHICLES (Fahrzeuge) enthalten ist, welche
in der COUPLED-Klausel angegeben wurde.
In diesem Beispiel werden Datensätze nur gefunden, wenn die beiden Dateien
EMPLOYEES und VEHICLES physisch gekoppelt sind.
Die Option VIA descriptor1 =
descriptor2 erlaubt es Ihnen, in einer Suchabfrage
mehrere Adabas-Dateien logisch miteinander zu koppeln, dabei ist:
Die beiden Dateien brauchen nicht physisch in Adabas gekoppelt zu sein. Diese
COUPLED-Option nutzt die ab Adabas Version 5 gebotene Möglichkeit des
Soft Coupling aus, die in der Adabas-Dokumentation beschrieben ist.
Siehe auch Beispiel 8 - VIA-Klausel.
Diese Klausel gilt nur für Adabas- und VSAM-Datenbanken; für VSAM ist sie nur bei ESDS gültig.
Sie können diese Klausel benutzen, um als
operand5 eine Adabas-ISN (Internal Sequence
Number) oder VSAM-RBA (relative Byte-Adresse) anzugeben, die als Startwert für die
Auswahl von Datensätzen benutzt werden soll.
operand5 muss im Bereich von 0
bis 4294967295 sein. Für Extended ESDS VSAM-Dateien kann dieser Wert bei
einer Steuerintervallgröße von 4 KB bis zu 16 TB und bei einer Steuerintervallgröße von
32 KB bis zu 128 TB betragen.
Diese Klausel kann zum Repositionieren innerhalb einer FIND-Schleife,
deren Verarbeitung unterbrochen wurde, benutzt werden, um auf einfache Weise den
nächsten Datensatz zu bestimmen, mit dem die Verarbeitung fortgesetzt werden soll. Dies
ist besonders hilfreich, wenn der nächste Datensatz sich nicht eindeutig durch einen
seiner Deskriptorwerte ermitteln lässt.
Anmerkung
Als tatsächlicher Startwert wird nicht der Wert von
operand5, sondern der nächsthöhere Wert
genommen.
Siehe Programm FNDSISN in Library SYSEXSYN.
Diese Klausel gilt nur für Zugriffe auf Adabas- und SQL-Datenbanken.
Mit Entire System Server und Natural Messaging ist diese Klausel nicht zulässig.
SORTED [BY]
descriptor
DESCENDING]
|
Die SORTED BY-Klausel dient dazu, die ausgewählten Datensätze in der
Reihenfolge der Werte eines oder mehrerer (maximal 3) Deskriptoren zu sortieren. Diese
Deskriptoren brauchen nicht mit den als Suchkriterium verwendeten Deskriptoren identisch
zu sein.
Normalerweise wird in aufsteigender Reihenfolge der Werte sortiert; wünschen
Sie eine absteigende Sortierfolge, geben Sie das Schlüsselwort
DESCENDING an. Der Sortiervorgang verwendet die
Adabas-Invertierten-Listen, es werden hierbei keine Datensätze gelesen.
Anmerkung
Diese Klausel kann beträchtliche zusätzliche Verarbeitungszeit beanspruchen, falls
das zur Steuerung der Sortierfolge verwendete Deskriptorfeld viele Werte enthält. Das
liegt daran, dass die gesamte Wertliste abgesucht werden muss, bis alle ausgewählten
Datensätze in der Liste lokalisiert worden sind. Wollen Sie eine große Zahl von
Datensätzen sortieren, sollten Sie daher stattdessen das Statement SORT
verwenden.
Bei der Verwendung einer SORTED BY-Klausel gelten die Adabas-Sortierlimits
(siehe ADARUN-Parameter LS in der
Adabas-Dokumentation).
In einer SORTED BY-Klausel darf kein Deskriptor, der Teil einer
Periodengruppe ist, angegeben werden. Ein multiples Feld (ohne Index) darf angegeben
werden.
Auf z/OS-Computern dürfen in einer SORTED BY-Klausel keine
Nicht-Deskriptoren angegeben werden.
Eine SORTED BY-Klausel darf nicht zusammen mit einer
RETAIN-Klausel verwendet werden.
Siehe auch Beispiel 9 - SORTED BY-Klausel.
Wenn sowohl die STARTING WITH- als auch die SORTED BY-Klausel
im selben FIND-Statement verwendet werden und die darunterliegende
Datenbank Adabas ist, ist Folgendes zu beachten:
Bei Adabas for z/OS wird das FIND-Statement in den folgenden Schritten
ausgeführt:
Alle Datensätze, auf die das Suchkriterium zutrifft, werden gesammelt und in die ISN-Reihenfolge gebracht.
Die Datensätze werden nach dem in der SORTED BY-Klausel angegeben
Deskriptor sortiert.
Der Datensatz, dessen ISN-Wert in der STARTING WITH-Klausel angegeben
ist, wird in die nach Deskriptor sortierte Datensatzliste platziert.
Die auf Datensätze, die nach dem unter Schritt 3 gefundenen Datensatz kommen,
werden in der FIND-Schleife zurückgegeben.
Bei Adabas for OpenSystems (Linux and Cloud oder Windows) wird dasselbe Statement wie folgt ausgeführt:
Alle Datensätze, auf die das Suchkriterium zutrifft, werden gesammelt und in die ISN-Reihenfolge gebracht.
Der Datensatz, dessen ISN-Wert in der STARTING WITH-Klausel angegeben
ist, wird in die nach ISN sortierte Datensatzliste platziert.
Die Datensätze, die nach dem unter Schritt 2 gefundenen Datensatz kommen, werden
nach dem in der SORTED BY-Klausel angegebenen Deskriptor sortiert und
in der FIND-Schleife zurückgegeben.
Beispiel:
Wenn man das folgende Programm mit Adabas for z/OS und Adabas for Linux and Cloud/Windows ausführt,
DEFINE DATA LOCAL
1 V1 VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 CITY
1 #ISN (I4)
END-DEFINE
FORMAT NL=5 SG=OFF PS=43 AL=15
*
PRINT 'FIND' (I)
FIND V1 WITH NAME = 'B' THRU 'BALBIN'
RETAIN AS 'SET1'
IF *COUNTER = 4 THEN
#ISN := *ISN
END-IF
DISPLAY *ISN V1
END-FIND
*
PRINT / 'FIND .. SORTED BY NAME' (I)
FIND V1 WITH 'SET1'
SORTED BY NAME
DISPLAY *ISN V1
END-FIND
*
PRINT / 'FIND .. STARTING WITH ISN = ' (I) #ISN (AD=I)
FIND V1 WITH 'SET1'
STARTING WITH ISN = #ISN
DISPLAY *ISN V1
END-FIND
*
PRINT / 'FIND .. STARTING WITH ISN = ' (I) #ISN (AD=I)
' .. SORTED BY NAME' (I)
FIND V1 WITH 'SET1'
STARTING WITH ISN = #ISN
SORTED BY NAME
DISPLAY *ISN V1
END-FIND
END
erhält man folgendes Ergebnis:
| Ergebnis bei Natural for z/OS | Ergebnis bei Natural for OpenSystems |
|---|---|
ISN NAME FIRST-NAME CITY
----- --------------- --------------- ---------------
FIND V1 WITH NAME = 'B' THRU 'BALBIN'
12 BAILLET PATRICK LYS LEZ LANNOY
58 BAGAZJA MARJAN MONTHERME
351 BAECKER JOHANNES FRANKFURT
355 BAECKER KARL SINDELFINGEN
370 BACHMANN HANS MUENCHEN
490 BALBIN ENRIQUE BARCELONA
650 BAKER SYLVIA OAK BROOK
913 BAKER PAULINE DERBY
FIND .. SORTED BY NAME
370 BACHMANN HANS MUENCHEN
351 BAECKER JOHANNES FRANKFURT
355 BAECKER KARL SINDELFINGEN
58 BAGAZJA MARJAN MONTHERME
12 BAILLET PATRICK LYS LEZ LANNOY
650 BAKER SYLVIA OAK BROOK
913 BAKER PAULINE DERBY
490 BALBIN ENRIQUE BARCELONA
FIND .. STARTING WITH ISN = 355
370 BACHMANN HANS MUENCHEN
490 BALBIN ENRIQUE BARCELONA
650 BAKER SYLVIA OAK BROOK
913 BAKER PAULINE DERBY
FIND .. STARTING WITH ISN = 355 .. SORTED BY NAME
58 BAGAZJA MARJAN MONTHERME
12 BAILLET PATRICK LYS LEZ LANNOY
650 BAKER SYLVIA OAK BROOK
913 BAKER PAULINE DERBY
490 BALBIN ENRIQUE BARCELONA
|
ISN NAME FIRST-NAME CITY
----- --------------- --------------- ---------------
FIND V1 WITH NAME = 'B' THRU 'BALBIN'
12 BAILLET PATRICK LYS LEZ LANNOY
58 BAGAZJA MARJAN MONTHERME
351 BAECKER JOHANNES FRANKFURT
355 BAECKER KARL SINDELFINGEN
370 BACHMANN HANS MUENCHEN
490 BALBIN ENRIQUE BARCELONA
650 BAKER SYLVIA OAK BROOK
913 BAKER PAULINE DERBY
FIND .. SORTED BY NAME
370 BACHMANN HANS MUENCHEN
351 BAECKER JOHANNES FRANKFURT
355 BAECKER KARL SINDELFINGEN
58 BAGAZJA MARJAN MONTHERME
12 BAILLET PATRICK LYS LEZ LANNOY
650 BAKER SYLVIA OAK BROOK
913 BAKER PAULINE DERBY
490 BALBIN ENRIQUE BARCELONA
FIND .. STARTING WITH ISN = 355
370 BACHMANN HANS MUENCHEN
490 BALBIN ENRIQUE BARCELONA
650 BAKER SYLVIA OAK BROOK
913 BAKER PAULINE DERBY
FIND .. STARTING WITH ISN = 355 .. SORTED BY NAME
370 BACHMANN HANS MUENCHEN
650 BAKER SYLVIA OAK BROOK
913 BAKER PAULINE DERBY
490 BALBIN ENRIQUE BARCELONA
|
Ein FIND-Statement mit höchstens einer dieser Optionen (SORTED
BY oder STARTING WITH ISN) liefert immer dieselben Datensätze in
derselben Reihenfolge, egal unter welchem System das Statement ausgeführt wird. Werden
jedoch die beiden Klauseln zusammen benutzt, ist das Ergebnis davon abhängig, auf
welcher Plattform das Datenbank-Statement von Adabas bedient wird.
Wenn Sie beabsichtigen, ein solches Natural-Programm auf mehreren Plattformen
einzusetzen, sollten Sie deshalb die Kombination der Klauseln SORTED BY und
STARTING WITH ISN im selben FIND-Statement vermeiden.
Diese Klausel gilt nur für Zugriffe auf Adabas-Datenbanken.
Mit Entire System Server und Natural Messaging ist diese Klausel nicht zulässig.
RETAIN AS
operand6
|
Operanden-Definitionstabelle:
| Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand6
|
C | S | A | ja | nein | ||||||||||||||
Syntax-Element-Beschreibung:
Siehe auch Beispiel 10 - RETAIN-Klausel.
Die Anzahl der Sets, die zurückgestellt werden können, ist nicht begrenzt; die Anzahl
der ISNs pro Set auch nicht. Die zu einer gegebenen Zeit benötigte Mindestanzahl von
ISN-Sets sollte definiert werden. Nicht länger benötigte Sets sollten mit einem
RELEASE SETS-Statement aus der Arbeitsdatei gelöscht werden.
Wenn sie nicht von einem RELEASE-Statement freigegeben werden, bleiben
erstellte ISN-Sets während der gesamten Natural-Session erhalten und werden nicht
automatisch gelöscht, außer bei einem Library-Wechsel. Ein mit einem Programm erstellter
Set kann von einem anderen Programm referenziert und verarbeitet oder unter Angabe
zusätzlicher Suchkriterien weiter selektiert werden.
Die Datensätze, deren ISNs in einem ISN-Set enthalten sind, sind nicht vor Zugriff/Veränderung durch andere Benutzer geschützt. Bevor Sie Datensätze aus dem Set verarbeiten, empfiehlt es sich daher sicherzustellen, dass das ursprüngliche Selektionskriterium, mit dem der Set erstellt wurde, immer noch auf die ausgewählten Datensätze zutrifft.
Dies geschieht mit einem neuen FIND-Statement, bei dem man den Set-Namen
in der WITH-Klausel als
primäres Suchkriterium angibt und in einer WHERE-Klausel das ursprüngliche Primärsuchkriterium (d.h.
das Suchkriterium aus der WITH-Klausel des FIND-Statements,
mittels dessen der Set erstellt wurde).
Eine RETAIN-Klausel darf nicht zusammen mit einer SORTED BY-Klausel verwendet
werden.
WHERE
logical-condition
|
Die WHERE-Klausel dient dazu, ein zusätzliches Selektionskriterium
(logical-condition ) anzugeben, das ausgewertet wird,
nachdem ein über die WITH-Klausel ausgewählter Datensatz gelesen wurde und
bevor ein ausgewählter Datensatz weiter verarbeitet wird (einschließlich
AT BREAK-Auswertung).
Die für logische Bedingungen gültige Syntax ist im Abschnitt Logische Bedingungen im Leitfaden zur Programmierung erklärt.
Ist für das FIND-Statement die Anzahl der zu verarbeitenden Datensätze
durch ein Limit begrenzt, so werden Datensätze, die aufgrund einer
WHERE-Klausel nicht weiterverarbeitet werden, bei der Ermittlung
des Limits nicht mitgezählt. Sie werden allerdings bei der Ermittlung eines auf
allgemeinerer Ebene gesetzten Limits (Session-Parameter LT, GLOBALS-Kommando oder LIMIT-Statement) mitgezählt.
Siehe auch Beispiel 11 - WHERE-Klausel.
IF NO [RECORDS] [FOUND] |
||
|
|
|
|
END-NOREC |
||
IF NO [RECORDS] [FOUND] |
|||
|
|
|
||
Syntax-Element-Beschreibung:
| Syntax-Element | Beschreibung |
|---|---|
IF NO RECORDS
FOUND |
IF NO RECORDS FOUND-Klausel:
In der In einem solchen Fall, dann löst die Falls Sie dies nicht wünschen, geben Sie in der |
|
Statements für die Verarbeitung:
Enthält die Sollen vor Durchlaufen der Schleife keine weiteren Statements ausgeführt
werden, muss die |
|
END-NOREC |
Ende der IF NO RECORDS FOUND-Klausel:
Im Structured Mode muss das für Natural reservierte Schlüsselwort
Im Reporting Mode werden die Statements |
Siehe auch Beispiel 12 - IF NO RECORDS FOUND-Klausel.
Natural setzt alle Datenbankfelder, die die in der aktuellen Verarbeitungsschleife
angegebene Datei referenzieren, auf Leerwerte, es sei denn, eines der in der IF NO
RECORDS FOUND-Klausel angegebenen Statements weist den Feldern andere Werte
zu.
Natural-Systemfunktionen werden einmal für den leeren Datensatz ausgewertet, der für
die aus der IF NO RECORDS FOUND-Klausel resultierende Verarbeitung erstellt
wurde.
Bei FIND FIRST, FIND NUMBER und FIND UNIQUE kann diese Klausel nicht
verwendet werden.
Beispiel 5 - Mehrere Beispiele für komplexe Suchausdrücke in WITH-Klausel
Beispiel 6 - Mehrere Beispiele für die Benutzung von Datenbank-Arrays
Beispiel 13 - Systemvariablen mit dem FIND-Statement benutzen
Siehe auch das Beispiel für FIND NUMBER: Programm FNDNUM.
** Example 'FNDPWD': FIND (with PASSWORD clause)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 NAME
2 PERSONNEL-ID
*
1 #PASSWORD (A8)
END-DEFINE
*
INPUT 'ENTER PASSWORD FOR EMPLOYEE FILE:' #PASSWORD (AD=N)
LIMIT 2
*
FIND EMPLOY-VIEW PASSWORD = #PASSWORD
WITH NAME = 'SMITH'
DISPLAY NOTITLE NAME PERSONNEL-ID
END-FIND
*
END
Ausgabe des Programms FNDPWD:
ENTER PASSWORD FOR EMPLOYEE FILE:
** Example 'FNDCIP': FIND (with PASSWORD/CIPHER clause)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 NAME
2 PERSONNEL-ID
*
1 #PASSWORD (A8)
1 #CIPHER (N8)
END-DEFINE
*
LIMIT 2
INPUT 'ENTER PASSWORD FOR EMPLOYEE FILE: ' #PASSWORD (AD=N)
/ 'ENTER CIPHER KEY FOR EMPLOYEE FILE: ' #CIPHER (AD=N)
*
FIND EMPLOY-VIEW PASSWORD = #PASSWORD
CIPHER = #CIPHER
WITH NAME = 'SMITH'
DISPLAY NOTITLE NAME PERSONNEL-ID
END-FIND
*
END
Ausgabe des Programms FNDCIP:
ENTER PASSWORD FOR EMPLOYEE FILE: ENTER CIPHER KEY FOR EMPLOYEE FILE:
FIND STAFF WITH NAME = 'SMITH'
FIND STAFF WITH CITY NE 'BOSTON'
FIND STAFF WITH BIRTH = 610803
FIND STAFF WITH BIRTH = 610803 THRU 610811
FIND STAFF WITH NAME = 'O HARA' OR = 'JONES' OR = 'JACKSON'
FIND STAFF WITH PERSONNEL-ID = 100082 THRU 100100
BUT NOT 100087 THRU 100095
Wenn der im Basis-Suchkriterium benutzte Deskriptor ein multiples Feld ist, können
grundsätzlich vier verschiedene Arten von Ergebnissen erzielt werden (das Feld
MU-FIELD in den folgenden Beispielen wird als multiples Feld
angenommen):
FIND XYZ-VIEW WITH MU-FIELD = 'A'
Dieses Statement gibt Datensätze zurück, bei denen wenigstens eine Ausprägung
von MU-FIELD den Wert A hat.
FIND XYZ-VIEW WITH MU-FIELD NOT EQUAL 'A'
Dieses Statement gibt Datensätze zurück, bei denen wenigstens eine Ausprägung
von MU-FIELD
nicht den Wert A hat.
FIND XYZ-VIEW WITH NOT MU-FIELD NOT EQUAL 'A'
Dieses Statement gibt Datensätze zurück, bei denen jede Ausprägung von
MU-FIELD den Wert A hat.
FIND XYZ-VIEW WITH NOT MU-FIELD = 'A'
Dieses Statement gibt Datensätze zurück, bei denen keine der Ausprägungen von
MU-FIELD den Wert A hat.
FIND STAFF WITH BIRTH LT 19770101 AND DEPT = 'DEPT06'
FIND STAFF WITH JOB-TITLE = 'CLERK TYPIST'
AND (BIRTH GT 19560101 OR LANG = 'SPANISH')
FIND STAFF WITH JOB-TITLE = 'CLERK TYPIST'
AND NOT (BIRTH GT 19560101 OR LANG = 'SPANISH')
FIND STAFF WITH DEPT = 'ABC' THRU 'DEF'
AND CITY = 'WASHINGTON' OR = 'LOS ANGELES'
AND BIRTH GT 19360101
FIND CARS WITH MAKE = 'VOLKSWAGEN'
AND COLOR = 'RED' OR = 'BLUE' OR = 'BLACK'
In den folgenden Beispielen wird davon ausgegangen, dass das Feld SALARY
(Gehalt) ein in einer Periodengruppe enthaltener Deskriptor und das Feld
LANG (Sprache) ein multiples Feld ist.
FIND EMPLOYEES WITH SALARY LT 20000
Führt zu einer Suche aller Ausprägungen von SALARY.
FIND EMPLOYEES WITH SALARY (1) LT 20000
Führt zu einer Suche nur nach der ersten Ausprägung.
FIND EMPLOYEES WITH SALARY (1:4) LT 20000 /* invalid
Eine Bereichsangabe muss nicht für ein als Suchkriterium benutztes Feld innerhalb einer Periodengruppe vorgenommen werden.
FIND EMPLOYEES WITH LANG = 'FRENCH'
Führt zu einer Suche aller Werte von LANG.
FIND EMPLOYEES WITH LANG (1) = 'FRENCH' /* invalid
Ein Index darf für ein als Suchkriterium benutztes multiples Feld nicht angegeben werden.
** Example 'FNDCPL': FIND (using coupled files)
** NOTE: Adabas files must be physically coupled when using the
** COUPLED clause without the VIA clause.
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 NAME
1 VEHIC-VIEW VIEW OF VEHICLES
2 MAKE
END-DEFINE
*
FIND EMPLOY-VIEW WITH CITY = 'FRANKFURT'
AND COUPLED TO
VEHIC-VIEW WITH MAKE = 'VW'
DISPLAY NOTITLE NAME
END-FIND
*
END
** Example 'FNDVIA': FIND (with VIA clause)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 FIRST-NAME
1 VEHIC-VIEW VIEW OF VEHICLES
2 PERSONNEL-ID
END-DEFINE
*
FIND EMPLOY-VIEW WITH NAME = 'ADKINSON'
AND COUPLED TO VEHIC-VIEW
VIA PERSONNEL-ID = PERSONNEL-ID WITH MAKE = 'VOLVO'
DISPLAY PERSONNEL-ID NAME FIRST-NAME
END-FIND
*
END
Ausgabe des Programms FNDVIA:
Page 1 05-01-17 13:18:22 PERSONNEL NAME FIRST-NAME ID --------- -------------------- -------------------- 20011000 ADKINSON BOB
** Example 'FNDSOR': FIND (with SORTED BY clause)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 CITY
2 NAME
2 FIRST-NAME
2 PERSONNEL-ID
END-DEFINE
*
LIMIT 10
FIND EMPLOY-VIEW WITH CITY = 'FRANKFURT'
SORTED BY NAME PERSONNEL-ID
DISPLAY NOTITLE NAME (IS=ON) FIRST-NAME PERSONNEL-ID
END-FIND
*
END
Ausgabe des Programms FNDSOR:
NAME FIRST-NAME PERSONNEL
ID
-------------------- -------------------- ---------
BAECKER JOHANNES 11500345
BECKER HERMANN 11100311
BERGMANN HANS 11100301
BLAU SARAH 11100305
BLOEMER JOHANNES 11200312
DIEDRICHS HUBERT 11600301
DOLLINGER MARGA 11500322
FALTER CLAUDIA 11300311
HEIDE 11400311
FREI REINHILD 11500301
** Example 'RELEX1': FIND (with RETAIN clause and RELEASE statement)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 CITY
2 BIRTH
2 NAME
*
1 #BIRTH (D)
END-DEFINE
*
MOVE EDITED '19400101' TO #BIRTH (EM=YYYYMMDD)
*
FIND NUMBER EMPLOY-VIEW WITH BIRTH GT #BIRTH
RETAIN AS 'AGESET1'
IF *NUMBER = 0
STOP
END-IF
*
FIND EMPLOY-VIEW WITH 'AGESET1' AND CITY = 'NEW YORK'
DISPLAY NOTITLE NAME CITY BIRTH (EM=YYYY-MM-DD)
END-FIND
*
RELEASE SET 'AGESET1'
*
END
Ausgabe des Programms RELEX1:
NAME CITY DATE
OF
BIRTH
-------------------- -------------------- ----------
RUBIN NEW YORK 1945-10-27
WALLACE NEW YORK 1945-08-04
** Example 'FNDWHE': FIND (with WHERE clause)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 JOB-TITLE
2 CITY
END-DEFINE
*
FIND EMPLOY-VIEW WITH CITY = 'PARIS'
WHERE JOB-TITLE = 'INGENIEUR COMMERCIAL'
DISPLAY NOTITLE
CITY JOB-TITLE PERSONNEL-ID NAME
END-FIND
*
END
Ausgabe des Programms FNDWHE:
CITY CURRENT PERSONNEL NAME
POSITION ID
-------------------- ------------------------- --------- --------------------
PARIS INGENIEUR COMMERCIAL 50007300 CAHN
PARIS INGENIEUR COMMERCIAL 50006500 MAZUY
PARIS INGENIEUR COMMERCIAL 50004700 FAURIE
PARIS INGENIEUR COMMERCIAL 50004400 VALLY
PARIS INGENIEUR COMMERCIAL 50002800 BRETON
PARIS INGENIEUR COMMERCIAL 50001000 GIGLEUX
PARIS INGENIEUR COMMERCIAL 50000400 KORAB-BRZOZOWSKI
** Example 'FNDIFN': FIND (using IF NO RECORDS FOUND)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 FIRST-NAME
1 VEHIC-VIEW VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
END-DEFINE
*
LIMIT 15
EMP. READ EMPLOY-VIEW BY NAME STARTING FROM 'JONES'
/*
VEH. FIND VEHIC-VIEW WITH PERSONNEL-ID = PERSONNEL-ID (EMP.)
IF NO RECORDS FOUND
MOVE '*** NO CAR ***' TO MAKE
END-NOREC
/*
DISPLAY NOTITLE
NAME (EMP.) (IS=ON)
FIRST-NAME (EMP.) (IS=ON)
MAKE (VEH.)
END-FIND
/*
END-READ
END
Ausgabe des Programms FNDIFN:
NAME FIRST-NAME MAKE
-------------------- -------------------- --------------------
JONES VIRGINIA CHRYSLER
MARSHA CHRYSLER
CHRYSLER
ROBERT GENERAL MOTORS
LILLY FORD
MG
EDWARD GENERAL MOTORS
MARTHA GENERAL MOTORS
LAUREL GENERAL MOTORS
KEVIN DATSUN
GREGORY FORD
JOPER MANFRED *** NO CAR ***
JOUSSELIN DANIEL RENAULT
JUBE GABRIEL *** NO CAR ***
JUNG ERNST *** NO CAR ***
JUNKIN JEREMY *** NO CAR ***
KAISER REINER *** NO CAR ***
** Example 'FNDVAR': FIND (using *ISN, *NUMBER, *COUNTER)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 CITY
END-DEFINE
*
LIMIT 3
FIND EMPLOY-VIEW WITH CITY = 'MADRID'
DISPLAY NOTITLE PERSONNEL-ID NAME
*ISN *NUMBER *COUNTER
END-FIND
*
END
Ausgabe des Programms FNDVAR:
PERSONNEL NAME ISN NMBR CNT
ID
--------- -------------------- ----------- ----------- -----------
60000114 DE JUAN 400 41 1
60000136 DE LA MADRID 401 41 2
60000209 PINERO 405 41 3
In dem folgenden Beispiel werden zuerst alle Mitarbeiter mit Namen SMITH
in der Datei EMPLOYEES (Angestellte) ausgewählt. Dann wird die
PERSONNEL-ID (Personalnummer) aus der Datei EMPLOYEES als
Suchschlüssel für einen Zugriff auf die Datei VEHICLES (Fahrzeuge)
benutzt.
** Example 'FNDMUL': FIND (with multiple files)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 FIRST-NAME
1 VEHIC-VIEW VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
END-DEFINE
*
LIMIT 15
EMP. FIND EMPLOY-VIEW WITH NAME = 'SMITH'
/*
VEH. FIND VEHIC-VIEW WITH PERSONNEL-ID = EMP.PERSONNEL-ID
IF NO RECORDS FOUND
MOVE '*** NO CAR ***' TO MAKE
END-NOREC
DISPLAY NOTITLE
EMP.NAME (IS=ON)
EMP.FIRST-NAME (IS=ON)
VEH.MAKE
END-FIND
END-FIND
END
Ausgabe des Programms FNDMUL:
Der sich ergebende Report zeigt NAME und FIRST-NAME (Vorname)
aus der Datei EMPLOYEES für alle Mitarbeiter mit Namen SMITH
sowie MAKE (Fabrikat) jedes Autos aus der Datei VEHICLES
dieser Mitarbeiter an.
NAME FIRST-NAME MAKE
-------------------- -------------------- --------------------
SMITH GERHARD ROVER
SEYMOUR *** NO CAR ***
MATILDA FORD
ANN *** NO CAR ***
TONI TOYOTA
MARTIN *** NO CAR ***
THOMAS FORD
SUNNY *** NO CAR ***
MARK FORD
LOUISE CHRYSLER
MAXWELL MERCEDES-BENZ
MERCEDES-BENZ
ELSA CHRYSLER
CHARLY CHRYSLER
LEE *** NO CAR ***
FRANK FORD
FIND EMPL-VIEW WITH NAME = ...
IN SHARED HOLD MODE=Q /* Record in shared hold until next record is read.
...
GET EMPL-VIEW *ISN /* The record remains unchanged!
...
END-FIND
FIND EMPL-VIEW WITH NAME = ... /* Records found are put in hold while reading.
SKIP RECORDS IN HOLD /* Records already held by other users are skipped
... /* to prevent error NAT3145.
UPDATE
END TRANSACTION
END-FIND