HISTOGRAM
|
|
ALL
|
|
[MULTI-FETCH-clause
] [multi-fetch-factor] [IN] [FILE]
view-name
|
||
| (operand1) | ||||||
[PASSWORD=operand2]
|
||||||
|
|
[IN]
|
|
ASCENDING
|
|
[SEQUENCE]
|
|
DESCENDING
|
||||||
VARIABLE
operand3
|
||||||
DYNAMIC
operand3 |
||||||
[VALUE]
[FOR] [FIELD]
operand4
|
||||||
| [STARTING/ENDING-clause] | ||||||
[WHERE
logical-condition]
|
||||||
|
statement
|
||||||
END-HISTOGRAM
[(r)]
(structured mode only) |
||||||
LOOP [(r)]
(reporting mode only) |
||||||
Dieser Abschnitt 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 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
(r)
|
Ende des HISTOGRAM-Statements:
Im Structured Mode muss das für Natural reservierte Schlüsselwort
Im Structured Mode können Sie bei Im Reporting Mode wird das Natural-Statement Im Reporting Mode können Sie bei |
|
LOOP
(r)
|
||
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 Management 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