FIND
|
[MULTI-FETCH-clause] [] |
|
[IN ] [FILE ]
view-name |
|||||||||
[PASSWORD= operand2]
|
||||||||||||
[CIPHER= operand3]
|
||||||||||||
[WITH ] [[LIMIT ] (operand4)]
basic-search-criterion
|
||||||||||||
[COUPLED-clause] 4/42 | ||||||||||||
[STARTING WITH
ISN= operand5]
|
||||||||||||
[SORTED-BY-clause] | ||||||||||||
[RETAIN-clause] | ||||||||||||
[WHERE-clause] | ||||||||||||
[IF-NO-RECORDS-FOUND-clause] | ||||||||||||
statement | ||||||||||||
END-FIND
|
(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: 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 FIND Statement 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 Sourcecode-Zeilennummer
referenziert werden. Alle drei Systemvariablen haben Format/Länge P10; diese(s)
Format/Länge kann nicht geändert werden.
*ISN |
|
||||||||
---|---|---|---|---|---|---|---|---|---|
*NUMBER |
|
||||||||
*COUNTER | *COUNTER
enthält 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.
Bei Entire System Server sind FIND NUMBER
und
FIND UNIQUE
sowie die
Klauseln PASSWORD
,
CIPHER
,
COUPLED
und
RETAIN
nicht
zulässig.
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:
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 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 CIPHER-Klausel gilt nur für Zugriffe auf Adabas-Dateien. Mit Entire System Server 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 |
|
||||||||||
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. |
||||||||||
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 | Das für Natural reservierte Schlüsselwort
END-FIND muss zum Beenden des FIND -Statements
verwendet werden.
|
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 DL/I-
und SQL-Datenbanken nicht möglich.
Ein FIND FIRST
-Statement darf keine IF NO RECORDS
FOUND
-Klausel enthalten.
Beim FIND FIRST-Statement stehen folgende Natural-Systemvariablen zur Verfügung:
*ISN |
Die Systemvariable
|
---|---|
*NUMBER |
Die Systemvariable Mit Entire System Server 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.
Ein FIND NUMBER
-Statement darf keine
SORTED BY
- oder
IF NO RECORDS
FOUND
-Klausel enthalten.
Im Structured Mode darf keine WHERE
-Klausel benutzt werden.
FIND NUMBER
ist beim Zugriff auf DL/I-Datenbanken nicht
möglich.
Mit Entire System Server kann FIND NUMBER
nicht
verwendet werden.
Bei FIND NUMBER
stehen folgende Natural-Systemvariablen
zur Verfügung:
*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 Zugriff auf
DL/I-Datenbanken sowie beim Einsatz von Entire System Server nicht
möglich.
Bei SQL-Datenbanken ist FIND UNIQUE
nicht erlaubt.
(Ausnahme: auf Großrechnern kann FIND UNIQUE
für Primärschlüssel
verwendet werden; allerdings ist dies nur aus Kompatibilitätsgründen erlaubt
und sollte nicht benutzt werden.)
Ein FIND UNIQUE
-Statement darf keine
SORTED BY
- oder
IF NO RECORDS
FOUND
-Klausel enthalten.
*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 Multiple Row Processing (SQL) im Natural for DB2-Teil der Database Managment 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:
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 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:
null-indicator | Der Null-Indikator. | |
value | Möglicher Wert: | |
-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.
1
|
descriptor |
|
value | ||||
2
|
descriptor |
|
value
THRU value
[BUT NOT
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:
Bei HDAM-Datenbanken ist nur das folgende basic-search-criterion möglich:
descriptor |
|
value |
[NOT ]
|
basic-search-criterion |
|
search-expression |
Suchkriterien, die sich auf unterschiedliche
Segment-Arten beziehen, dürfen nicht mit dem logischen Operator OR
verknüpft werden.
FIND COURSE WITH COURSEN > 1 FIND COURSE WITH COURSEN > 1 AND COURSEN < 100 FIND OFFERING WITH (COURSEN-COURSE > 1 OR TITLE-COURSE = 'Natural') AND LOCATION = 'DARMSTADT'
FIND OFFERING WITH COURSEN-COURSE > 1 OR LOCATION = 'DARMSTADT'
Diese Klausel gilt nur für Zugriffe auf Adabas-Dateien.
Mit Entire System Server darf diese Klausel nicht verwendet werden.
|
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 ein Startwert für die Auswahl von Datensätzen benutzt werden soll.
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 darf diese Klausel nicht verwendet werden.
SORTED [BY ] descriptor
3 [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 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 Großrechnern 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 für Großrechner wird das FIND
-Statement in den
folgenden Schritten ausgeführt:
Alle Datensätze, auf die das Suchkriterium zutriff, 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 für OpenSystems (UNIX, Windows, OpenVMS) 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 Version 8 für Großrechner und Adabas Version 6.1 für UNIX/OpenVMS/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 für Großrechner (Adabas Version 8) | Ergebnis bei Natural für OpenSystems (Adabas Version 6.1) |
---|---|
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 darf diese Klausel nicht verwendet werden.
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 ]
|
|||
In der IF NO RECORDS FOUND
-Klausel können Sie eine
Verarbeitung angeben, die ausgeführt werden soll für den Fall, dass kein
Datensatz die in der WITH
- und
WHERE
-Klausel des
FIND
-Statements angegebenen Selektionskriterien erfüllt.
Ist dies der Fall, dann löst die IF NO RECORDS
FOUND
-Klausel eine Verarbeitungsschleife aus, die einmal mit einem
“leeren” Datensatz durchlaufen wird. Falls Sie dies nicht wünschen, geben Sie
in der IF NO RECORDS FOUND
-Klausel das Statement
ESCAPE BOTTOM
an.
Enthält die IF NO RECORDS FOUND
-Klausel
ein oder mehrere Statements, werden diese ausgeführt, unmittelbar bevor die
Schleife durchlaufen wird. Sollen vor Durchlaufen der Schleife keine weiteren
Statements ausgeführt werden, muss die IF NO RECORDS FOUND
-Klausel
das Schlüsselwort ENTER
enthalten.
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