Abfragen in ADIS bestehen im wesentlichen aus zwei Teilen:
Eine Abfrage in ADIS hat etwa folgendes Format:
Ein oder mehrere Search-Zeilen (mit S beginnend)
S<Status><Ereignis-Nr.>(<DDI-Nr.><Feldlänge><Auflösung><Niedrigster
Wert><Höchster Wert>)<Max. Anzahl von Aufzeichnungen><CR><LF>
und abgeschlossen mit einer Retrieve-Zeile (mit R beginnend)
R<Status><Ereignis-Nr.>(<DDI-Nr.><Feldlänge><Auflösung>)<CR><LF>
Bezogen auf das HIT ist die Ereignis-Nr. die Meldung, die beim HIT gemacht
wird, also z.B. für GEBURT die 882080 (6stellig). Die DDI-Nr. ist ein zur
Ereignis-Nr. zugeordnetes Element, das 8stellig ist (ggf. mit 0en vorne auffüllen). Feldlänge
ist 2stellig und die Auflösung (Anzahl Nachkommastellen) ist 1stellig. Die Werte
Niedrigster Wert und Höchster Wert grenzen die Abfrage der DDI auf
diese Werte ein. Intern werden alle DDI einer Search-Zeile und sämtliche Search-Zeilen
selbst mit UND verknüpft. Die Retrieve-Zeile gibt die Elemente einer Ereignis-Nr.
an, die zurückgegeben werden sollen.
Beispiel:
SN882080009000530801900010119991001000100
SN88208000820054150276090000000001276090000000001000100
RN8820800090008015000900053080
Aus der Tabelle GEBURT (882080) sollen alle GEB_DATR (900053) zwischen dem 1.1.1900
(19000101) und dem 1.10.1999 (19991001) ermittelt werden, die höchstens 100 Zeilen
liefern soll (erste SN-Zeile).
Zusätzlich soll die Suche in der Tabelle GEBURT (882080) auf die BNR15 (820054) auf
276090000000001 und 276090000000001 eingegrenzt werden,die auch höchstens 100 Zeilen
liefern soll (zweite SN-Zeile).
Die Retrieve-Zeile gibt an, daß aus der Tabelle GEBURT (882080) die Spalten LOM
(900080) und GEB_DATR (900053) zurückgegeben werden sollen.
Die Antwort sieht dann etwa so aus:
DN8820800090008015000900053080
VN88208027600091234567619990926
VN88208027600090000000219990926
VN88208027600091234560119990926
VN88208027609123456780119990926
VN88208027609123456780419990926
VN88208027609123456780719990926
VN88208027609123456780919990926
VN88208027609123456780219990926
VN88208027609123456780319990926
VN88208027600091234567919990929
VN88208027600211234567819990926
VN88208027600211234567719990929
VN88208027600211234566619990930
VN88208027600211234566719990929
VN88208027600091234565419990929
VN88208027600091234565519990929
VN88208027600099874569619990930
VN88208027600099876544519991001
Die DN-Zeile gibt genau die Spalten an, die in der RN-Zeile spezifiert wurden. Darunter
folgen hier im Beispiel 18 Ergebnisse der Abfrage in VN-Zeilen.
Das HIT-Protokoll läßt neben den normalen Abfragen mit der HIT-QueryLanguage
auch funktionelle Abfragen zu. Die normalen Abfragen werden lediglich fast 1:1 in
SQL-Syntax umgesetzt. Die funktionellen Abfragen
enthalten Funktionen mit Parametern, die in die HIT-QL eingebettet werden. Es werden drei
Arten von Funktionen angeboten:
| Inline-Funktionen (mit $ beginnend) Diese erzeugen eine eigene Spalte in einer
Abfrage:
$COUNT |
Anzahl Zeilen |
$COUNTF |
Zeilenzähler mit Feld gefüllt ("not NULL") |
$COUNTD |
Anzahl verschiedener ("distinct") Werte im Feld |
$MIN |
Minimum-Wert |
$MAX |
Maximum-Wert |
$AVG |
Durchschnittswert |
$SUM |
Numerische Summe |
$ALPHALOM |
Alpha-Darstellung von Ohrmarken |
$ALPHABNR |
Gegliederte Darstellung von Betriebsnummern |
Diese Art von Funktionen wird vom HitBatch im Zusammenhang mit ADIS nicht
unterstützt. Mehr hierzu siehe Anmerkungen.
|
| Newline-Funktionen (mit # beginnend) Diese erzeugen neue Zeilen in einer Abfrage:
#TIEREIN |
liefert Tiereingang und Vorbesitzer |
#TIERAUS |
liefert Tierausgang und Nachbesitzer |
#TIERSTAMM |
liefert Tierstammdaten |
#TIERENDE |
liefert Tierende-Daten |
#BESTREG |
liefert ein Bestandsregister zu einem Zeitraum |
#ADDRPOST |
liefert Postanschrift zm Betrieb |
#ADDRHOF |
liefert Hofanschrift zum Betrieb |
#ETIKETT |
liefert Etikettierungsdaten |
Newline-Funktionen werden von ADIS unterstützt, siehe Beispiel.
|
| Mixline-Funktionen (mit ! beginnend) Diese Funktionen liefern je nach vorliegenden
Daten andere Antwortzeilen zurück:
!ORGDATEN |
liefert Originaldatensatz zum Fehlervorgang |
!BEWMELD |
liefert alle Meldungen zur LOM in einem Zeitraum |
|
Diese Art von Funktionen kann wegen der unterschiedlichen Antwortsätze, deren Aufbau
wir in der Anfrage angeben müßten, nicht implementiert werden. Mehr hierzu siehe Anmerkungen.
Diese Funktionen wurden als Entitäten in HIT definiert, damit man sie in ADIS
einsetzen kann. Gemäß der ADIS-Definition lassen sich funktionale Abfragen nicht
anwenden. Sie lassen sich jedoch durch eine Kombination von mehreren Abfrage-Blöcken
aufbauen, die jeweils aus Search- und Retrieve-Zeilen bestehen. Die Inline- und
Newline-Funktionen können mit diesem Schema erstellt werden. Der HitBatch muß dann nur
die Aufgabe übernehmen, diese mehrfachen Search-Retrieve-Blöcke zu einer HIT-Anweisung
zusammenzufassen. Für die Mixline-Funktionen gibt es wegen der unterschiedlichen
Ausgabeentitäten keine Möglichkeit, dies in ADIS anzugeben, da der HitBatch die
Information benötigt, welche Spalten er wie aufbereiten muß, wenn der HitServer eine
Antwort schickt. Die einzige Möglichkeit hier wäre die Angabe aller möglichen
Entitäten samt ihrer Felder in den Retrieve-Zeilen, aber da nur eine Retrieve-Zeile pro
Abfragefunktion möglich ist, scheitert auch dies.
Das Grundprinzip der ADIS-Abfragen: Der erste Search-Retrieve-Block definiert die
Meldung, auf die die Abfrage zugreifen soll. Die Retrieve-Zeile enthält dann NUR die
Spalten, die normal ohne Funktion ausgegeben werden sollen. In weiteren
Search-Retrieve-Blöcken folgen jeweils die einzelnen Funktionen mit ihren Parametern. Als
Ende-Kennung wird die Terminate-Zeile (TN) verwendet, d.h. zwischen den zusammenhändenden
Search-Retrieve-Blöcken darf dann keine TN-Zeile auftauchen. Ein Search-Retrieve-Block
besitzt dabei folgenden Aufbau:
- SN <Funktion> (<Input-Feld> <Feldlänge> <Auflösung>
<Input-Wert oder ?> <?>) 000000
- hier weitere SN-Zeilen mit ein oder mehreren Funktionen
- RN <Funktion> (<Output-Feld> <Feldlänge> <Auflösung>)
In () eingeschlosse Terme können ein oder mehrfach auftreten.
Im folgenden nun ein Beispiel zur Umsetzung von Hit-Anweisungen mit funktionalen
Abfragen.
| Hit-Beispiel für Newline-Funktion: Beginnen wir mit einem ADIS-Beispiel:
SN 882081 00820054 15 0 276090000000001 276090000000001 000100
RN 882081 00820054 15 0 00900080 15 0 00820034 08 0
RN 003101 00001127 15 0 00800603 30 0
RN 003103 00001989 20 0 00001988 20 0
TN
|
Dies definiert die Tabelle ZUGANG (882081) als Abfragetabelle, die alle BNR15 (820054)
zwischen 276090000000001 und 276090000000001 (d.h. zur BNR15 276090000000001) ermitteln
und die BNR15 (820054), die LOM (900080) und ZUGA_DAT (820034) zurückgeben soll. Das
zweite RN ermittelt den Vorbesitzer der ermittelten Tiere über die Entität #TIEREIN
(3101) mit den Feldern BNR15_VB (1127) und NAME (800603). Da die SN-Zeile fehlt, werden
alle Zeilen der vorherigen Abfrage angenommen. Der dritte Block (hier auch nur eine
RN-Zeile ohne vorherige SN-Zeile) fragt schließlich den #TIERSTAM (3103) ab, von dem wir
nur LOM_X(1989) und LOM_MUTX(1988) des #BESTREG (3106) erhalten wollen. Diese gesamte
Abfrage ermittelt also zu allen zugegangenen Tieren die BNR und ZUGA_DAT, dazu den
Vorbesitzer und schließlich noch die Ohrmarken in einem bestimmten Zeitraum. Nochmals der
Hinweis: Zwischen den RN-Zeilen darf kein TN stehen, da dieses das Ende einer kombinierten
Abfrage darstellt.
Der für Hit aufbereitete Befehl sieht dann so aus:
*n:RS/R100:882081/820054;900080;820034;3101(*/1127;800603);3103(*/1989;1988):820054;EQ;276090000000001
Diese Abfrage wird 3 Antwortblöcke liefern: der erste liefert BNR15 und ZUGA_DAT,
deren BNR15 gleich 276090000000001 ist. Der zweite liefert die Tiereingangsdaten der
Vorbesitzer zu den in Block 1 ermittelten Tierdaten, Block 3 liefert aus dem Tierstamm
für die in Block 1 ermittelten BNR15 die Ohrmarke und die Mutterohrmarke in
alphanumerischer Form.
Zu beachten ist, daß nicht erst alle BNR15 aus Teil 1, dann alle
Tiereingangsdaten aus Teil 2 und schließlich alle Tierstammdaten aus Teil 3 ausgegeben
werden. Es werden zu jeder gefundenen BNR15 aus Teil 1 nacheinander die
Funktionen #TIEREIN und #TIERSTAM ausgeführt und wenn diese Ergebnisse
liefern, direkt hinter der dazugehörigen BNR15 ausgegeben.
Eine ADIS-Antwort (ohne Header etc.) sieht etwa so aus:
DN 882081 00820054 15 0 00900080 15 0 00820034 08 0
VN 882081 276090000000001 276000700000017 20000111
TN
DN 003101 00001127 15 0 00800603 30 0
VN 003101 276070000000002 Name-2
TN
DN 003103 00001989 20 0 00001988 20 0
VN 003103 DE 07 000 00017 DE 11 987 65432
TN
DN 882081 00820054 15 0 00900080 15 0 00820034 08 0
VN 882081 276090000000001 276000762993094 19991025
VN 882081 276090000000001 276000767755675 20000204
VN 882081 276090000000001 276000777878787 20000204
VN 882081 276090000000001 276000912345678 20000207
TN
DN 003103 00001989 20 0 00001988 20 0
VN 003103 DE 09 123 45678 DE 09 876 54321
TN
DN 882081 00820054 15 0 00900080 15 0 00820034 08 0
VN 882081 276090000000001 276001400092197 20000202
VN 882081 276090000000001 276001400115298 20000202
VN 882081 276090000000001 276001400140307 20000127
VN 882081 276090000000001 276001400140373 20000127
... |
Der erste Antwortblock enthält die erste BNR15, die der gegebenen
Bedingung genügt. Von dieser ersten BNR15 wird im zweiten Block #TIEREIN ausgegeben.
Auch von dieser ersten BNR15 wird im dritten Block #TIERSTAM ausgegeben.
Block 4 gibt vier BNR15 aus. Die ersten drei dieser BNR15 haben keinen #TIEREIN, jedoch
hat die vierte BNR15 wieder eine Ausgabe bei einer Funktion.
Block 5 zeigt nur den #TIERSTAM der letzten BNR15 aus Block 4 an. Ein #TIEREIN gibt es
hier nicht.
Block 6 setzt wieder die BNR15-Liste fort. |
Ein Einleseprogramm müßte die #TIEREIN- und #TIERSTAM-Ergebnisse den übergeordneten
BNR15 zuordnen.
| Bis heute sind fast alle Funktionen im HitServer implementiert
worden. Alle Inline-Funktionen und die meisten Newline-Funktionen stehen bereits zur
Verfügung.
|
| Damit eine Antwort im ADIS-Format generiert werden kann, MUß
die Anfrage selbst auch in ADIS geschrieben worden sein. Eine normale HIT-Anfrage kann
keine ADIS-Antwort liefern, da notwendige Dateninformationen fehlen.
|
| Es macht keinen Sinn, mehrere Abfragen pro Set zu definieren. Sie
erhalten sonst eine Ausgabedatei mit aneinandergereihten Daten, die möglicherweise nicht
zusammengehören. Zudem erschwert das ADIS-Format ein 'Fortsetzen' einer Ausgabedatei, da
grundsätzlich beim Schließen der Datei die Befehle 'EN' und 'ZN'
geschrieben werden müssen. Alles danach nachträglich angehängte wird nach
ADIS-Definition nicht mehr betrachtet und somit auch die Antworten von weiteren
ADIS-Abfragen innerhalb eines Set. Selbst wenn Sie manuell die dazwischenstehenden 'EN'
und 'ZN' entfernen, Sie können nicht erkennen, welche Daten zu welcher Abfrage gehören.
Genauso verhält es sich bei den 'normalen' CSV-Abfragen.
|
| Um dennoch Inline- und Mixline-Funktionen verwenden zu können, ist
folgender Weg denkbar: Anfrage in CSV stellen und die Antworten im CSV-Format per
Zusatzprogramm ins ADIS-Format umwandeln lassen.
|
Zurück zum Anfang |