HISTOGRAM
|
ALL
|
[MULTI-FETCH-clause
] [multi-fetch-factor] [IN ] [FILE ]
view-name
|
||||
(operand1) | ||||||
[PASSWORD= operand2]
|
||||||
[IN ]
|
ASC ENDING
|
[SEQUENCE ]
|
||||
DESC ENDING |
||||||
VARIABLE
operand3 |
||||||
DYNAMIC operand3 |
||||||
[VALUE ] [FOR ] [FIELD ]
operand4
|
||||||
[STARTING/ENDING-clause] | ||||||
[WHERE logical-condition]
|
||||||
statement | ||||||
END-HISTOGRAM
(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 DATA
|
LIMIT
|
PASSW
|
PERFORM BREAK PROCESSING
| READ
|
RETRY
|
STORE
|
UPDATE
Gehört zur Funktionsgruppe: Datenbankzugriffe und Datenbankänderungen
Das Statement HISTOGRAM
dient dazu, Werte eines
Datenbankfeldes, das als Deskriptor, Subdeskriptor oder Superdeskriptor
definiert ist, zu lesen. Die Werte werden direkt von der Adabas Invertierten
Liste (bzw. dem VSAM-Index) gelesen. Das HISTOGRAM
-Statement löst
zwar eine Verarbeitungsschleife aus, es kann aber auf keine anderen
Datenbankfelder als auf das mit dem HISTOGRAM
-Statement angegebene
Feld zugegriffen werden.
Siehe auch folgende Abschnitte im Leitfaden zur Programmierung.
Anmerkung:
Bei SQL-Datenbanken: Mit HISTOGRAM
erhalten Sie die
Anzahl der Reihen, die in einer bestimmten Spalte den gleichen Wert
haben.
Dieses Statement kann nicht bei DL/I-Datenbanken oder mit Entire System Server verwendet werden.
Bei einer VSAM-Datenbank gilt das
HISTOGRAM
-Statement nur für KSDS und ESDS.
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 | S | A | ja | nein | ||||||||||||||||
operand4 | S | A | N | P | I | F | B | D | T | L | nein | nein |
* Format B von operand1 kann nur mit einer Länge von kleiner gleich 4 benutzt werden.
Syntax-Element-Beschreibung:
Syntax-Element | Beschreibung | |
---|---|---|
operand1 / ALL
|
Anzahl der Deskriptorwerte:
Sie können die Anzahl der Deskriptorwerte, die mit dem
Andernfalls werden alle Deskriptorwerte gelesen, was Sie zusätzlich
durch das Schlüsselwort Das mit operand1 angegebene Limit hat
bei diesem Statement Vorrang vor einem mit einem Ist mit dem Profilparameter Anmerkungen:
|
|
MULTI-FETCH-clause
|
MULTI-FETCH-Klausel:
Siehe MULTI-FETCH-Klausel weiter unten. |
|
view-name
|
View-Name:
Als view-name geben Sie den Namen eines
Views an, der entweder in einem Der View darf außer dem im Ist das im View definierte Feld ein in einer Periodengruppe
enthaltenes Feld oder ein multiples Feld, das mit einem Indexbereich definiert
ist, dann wird jeweils nur die erste Ausprägung dieses Bereiches vom
Im Reporting Mode ist view-name der Name
eines DDM, falls kein |
|
PASSWORD =operand2
|
PASSWORD-Klausel:
Die |
|
SEQUENCE
|
SEQUENCE-Klausel
Die Klausel gilt nur für Adabas-, VSAM- und SQL-Datenbanken. Mit dieser Klausel können Sie bestimmen, ob die Werte in aufsteigender Reihenfolge oder in absteigender Reihenfolge gelesen werden sollen.
Beispiele für |
|
operand4
|
Deskriptor:
Als operand4 kann ein Deskriptor, ein Subdeskriptor, ein Superdeskriptor oder ein Hyperdeskriptor angegeben werden. 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. Es muss ein konstanter Index 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. |
|
STARTING-ENDING-clause
|
STARTING/ENDING-Klausel:
Mit den Schlüsselwörtern Weitere Informationen siehe Start-/Endwerte angeben weiter unten. |
|
WHERE logical-condition |
WHERE-Klausel:
Mit der Der in der Die Syntax für eine logical-condition ist im Abschnitt Logische Bedingungen im Leitfaden zur Programmierung beschrieben. |
|
END-HISTOGRAM
|
Ende des HISTOGRAM-Statements:
Im Structured Mode muss das für Natural reservierte Schlüsselwort
Im Reporting Mode wird das Natural-Statement
|
|
LOOP |
Anmerkung:
Diese Klausel kann nur bei Adabas- oder
DB2-Datenbanken benutzt werden.
MULTI-FETCH
|
ON
|
||||
OFF
|
|||||
[OF ]
multi-fetch-factor
|
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.
Mit den Schlüsselwörtern STARTING
und ENDING
(bzw. THRU
) können Sie einen Startwert und einen Endwert angeben,
und zwar in Form einer Konstanten oder einer Benutzervariablen. Damit legen Sie
fest, ab welchem Wert und bis zu welchem Wert gelesen werden soll.
Wenn der angegebene Startwert nicht vorhanden ist, wird der
nächsthöhere vorhandene Wert als Startwert genommen. Ist kein höherer Wert
vorhanden, wird die HISTOGRAM
-Schleife nicht ausgeführt.
Wenn Sie einen Endwert angeben, wird bis einschließlich des Endwertes gelesen.
Für Deskriptoren des Formats A oder B können hexadezimale Konstanten als Start- und Endwert angegeben werden.
Syntax-Option 1:
[STARTING ]
|
WITH
|
[VALUES ]
operand5
|
THRU
|
operand6 | |||||||||
FROM
|
ENDING AT
|
Syntax-Option 2:
[STARTING ]
|
WITH FROM
|
[VALUES ]
operand5
|
TO
|
operand6 |
Syntax-Option 3:
< | operand5 | ||
LT
|
|||
LESS
THAN
|
|||
> | |||
GT
|
|||
GREATER
THAN
|
|||
<=
|
|||
LE
|
|||
LESS
EQUAL
|
|||
>=
|
|||
GE
|
|||
GREATER
EQUAL |
Anmerkung:
Wenn die Vergleichsoperatoren von Diagramm 3 benutzt werden, dürfen
die Optionen ENDING AT
, THRU
und TO
nicht benutzt werden. Diese Vergleichsoperatoren sind auch für das
READ
-Statement
gültig.
Operanden-Definitionstabelle:
Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand5 | C | S | A | U | N | P | I | F | B | D | T | L | ja | nein | ||||||
operand6 | C | S | A | U | N | P | I | F | B | D | T | L | ja | nein |
Syntax-Element-Beschreibung:
Anmerkung:
Das Ergebnis von READ
/HISTOGRAM
THRU
/ENDING AT
kann vom Ergebnis bei
READ
/HISTOGRAM
TO
abweichen, wenn
Natural und die Datenbank, auf die zugegriffen wird, sich auf verschiedenen
Plattformen mit unterschiedlichen Sortierfolgen befinden.
Die Natural-Systemvariablen *ISN
,
*NUMBER
und *COUNTER
können bei einem HISTOGRAM
-Statement verwendet werden.
*NUMBER
und
*ISN
stehen erst nach Auswertung der
WHERE
-Klausel zur
Verfügung. Sie dürfen nicht innerhalb der logischen Bedingung einer
WHERE
-Klausel eingesetzt werden.
Systemvariable | Erläuterung |
---|---|
*NUMBER |
Die Systemvariable
*NUMBER
enthält die Anzahl der Datensätze, die den zuletzt gelesenen Wert enthalten.
Bezüglich SQL-Datenbanken siehe *NUMBER bei SQL Datenbanken in der Systemvariablen-Dokumentation. |
*ISN |
Die Systemvariable
*ISN enthält
die Nummer der Ausprägung einer Periodengruppe des aktuellen Datensatzes, die
den zuletzt gelesenen Wert enthält. Ist der Deskriptor nicht in einer
Periodengruppe enthalten, enthält *ISN den Wert
0 .
Bei SQL- und VSAM-Datenbanken kann
|
*COUNTER |
Die Systemvariable
*COUNTER
enthält die Gesamtzahl der bisher gelesenen Werte (nach Auswertung der
WHERE -Klausel).
|
** Example 'HSTEX1S': HISTOGRAM (structured mode) ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 CITY END-DEFINE * LIMIT 8 HISTOGRAM EMPLOY-VIEW CITY STARTING FROM 'M' DISPLAY NOTITLE CITY 'NUMBER OF/PERSONS' *NUMBER *COUNTER END-HISTOGRAM * END
Ausgabe des Programms HSTEX1S
:
CITY NUMBER OF CNT PERSONS -------------------- ----------- ----------- MADISON 3 1 MADRID 41 2 MAILLY LE CAMP 1 3 MAMERS 1 4 MANSFIELD 4 5 MARSEILLE 2 6 MATLOCK 1 7 MELBOURNE 2 8
Äquivalentes Reporting Mode-Beispiel: HSTEX1R
.
** Example 'HSTDSCND': HISTOGRAM (with DESCENDING) *********************************************************************** DEFINE DATA LOCAL 1 EMPL VIEW OF EMPLOYEES 2 NAME END-DEFINE * HISTOGRAM (10) EMPL IN DESCENDING SEQUENCE FOR NAME FROM 'ZZZ' DISPLAY NAME *NUMBER END-HISTOGRAM END
Ausgabe des Programms HSTDSCND
:
Page 1 05-01-13 13:41:03 NAME NMBR -------------------- ----------- ZINN 1 YOT 1 YNCLAN 1 YATES 1 YALCIN 1 YACKX-COLTEAU 1 XOLIN 1 WYLLIS 2 WULFRING 1 WRIGHT 1
** Example 'HSTVSEQ': HISTOGRAM (with VARIABLE SEQUENCE) *********************************************************************** DEFINE DATA LOCAL 1 EMPL VIEW OF EMPLOYEES 2 NAME * 1 #DIR (A1) 1 #STARTVAL (A20) END-DEFINE * SET KEY PF3 PF7 PF8 * MOVE 'ADKINSON' TO #STARTVAL * HISTOGRAM (9) EMPL FOR NAME FROM #STARTVAL WRITE NAME *NUMBER IF *COUNTER = 5 MOVE NAME TO #STARTVAL END-IF END-HISTOGRAM * #DIR := 'A' * REPEAT HISTOGRAM EMPL IN VARIABLE #DIR SEQUENCE FOR NAME FROM #STARTVAL MOVE NAME TO #STARTVAL INPUT NO ERASE (IP=OFF AD=O) 15/01 NAME *NUMBER // 'Direction:' #DIR // 'Press PF3 to stop' / ' PF7 to go step back' / ' PF8 to go step forward' / ' ENTER to continue in that direction' /* IF *PF-KEY = 'PF7' AND #DIR = 'A' MOVE 'D' TO #DIR ESCAPE BOTTOM END-IF IF *PF-KEY = 'PF8' AND #DIR = 'D' MOVE 'A' TO #DIR ESCAPE BOTTOM END-IF IF *PF-KEY = 'PF3' STOP END-IF END-HISTOGRAM /* IF *COUNTER(0250) = 0 STOP END-IF END-REPEAT END
Ausgabe des Programms HSTVSEQ
:
Page 1 05-01-13 13:50:31 ADKINSON 8 AECKERLE 1 AFANASSIEV 2 AHL 1 AKROYD 1 ALEMAN 1 ALESTIA 1 ALEXANDER 5 ALLEGRE 1 MORE
Nach Drücken von EINGABE:
Page 1 05-01-13 13:50:31 ADKINSON 8 AECKERLE 1 AFANASSIEV 2 AHL 1 AKROYD 1 ALEMAN 1 ALESTIA 1 ALEXANDER 5 ALLEGRE 1 AKROYD 1 Direction: A Press PF3 to stop PF7 to go step back PF8 to go step forward ENTER to continue in that direction