P8000/WEGA/contrib/ingres/dbs/cat/1doc.1

1981 lines
94 KiB
Groff
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

##############################################################
##############################################################
## ##
## ##
## ##
## ##
## ##
## ##
## ##
## ### # # ##### ###### ###### ##
## # ## # # # # # # # ##
## # # # # # # # # # ##
## # # # # # #### # # ###### ##
## # # # # # # # # # # ##
## # # ## # # # # # # ##
## ### # # ##### ####### ###### ###### ##
## ##
## ##
## ##
## ##
## ##
## ##### ##### # ##### ##
## # # # # # # # ##
## # # # # ##
## ###### ##### # ##### ##
## # # ### # # # ##
## # # ### # # # # # ##
## ##### ### ##### # ##### ##
## ##
## ##
## ##
## ##
## ##
## ##
## ##
## ##
## ##
## ##
## ##
## ##
## ##
## ##
## ##
## ##
## ##
## ##
##############################################################
##############################################################
Juni 16, 1989
- 2 -
AAAAnnnnwwwweeeennnnddddeeeerrrrhhhhaaaannnnddddbbbbuuuucccchhhh zzzzuuuu IIIINNNNGGGG____DDDDBBBB 6666....3333////3333 ffffuuuu""""rrrr UUUUNNNNIIIIXXXX
----SSSSyyyysssstttteeeemmmmeeee
_J_o"_r_g _W_e_n_z_l_a_f_f
_R_o_l_f _M_o_r_g_e_n_s_t_e_r_n
Zentralinstitut fu"r Kybernetik
und Informationsprozesse der
Akademie der Wissenschaften
Kurstrasse 30 - 34
Berlin
1080
VEB Kombinat EVK
- ODV -
Jagdweg 1
Olbernhau
9332
_R_E_F_E_R_A_T
Das vorliegende Anwenderhandbuch soll als Unter-
lage fu"r den lernenden und als Nachschlagewerk fu"r
den erfahrenen Anwender dienen. Es dokumentiert
die Version 6.3 Release 3. Es werden
Grundkenntnisse zu UNIX - kompatiblen Betriebs-
systemen vorausgesetzt. Das interaktive rela-
tionale Datenbanksystem ING_DB 6.3/3 la"sst sich
auf verschiedenen Ebenen nutzen. Vorgestellt wer-
den Mo"glichkeiten fu"r Recherchen, zeit- und
speicherplatzoptimale Dateistrukturen, Ablage von
Kommandofolgen in Dateien, Einordnung von ING_DB
-Kommandos (EQUEL und AMX) in C-Programme, Nutzung
von Shell-Kommandos, Zugriffs- und Sicherungsmass-
nahmen. Mit der Beschreibung und Untersetzung
durch Beispiele zum AMX-Compiler, zum Report- und
zum Eingabe- Generator wird das Handbuch
vervollsta"ndigt. ING_DB 6.3/3 ist so konzipiert,
dass seine Nutzung auch bei geringem Fachwissen
durchaus sinnvoll ist. Die Gefahr von Datenver-
lusten wird im Zusammenhang mit einem ausgefeilten
Datenschutz- und -sicherungsmechanismus a"usserst
gering gehalten.
UNIX ist ein Warenzeichen der AT&T Bell Labora-
torien.
Juni 16, 1989
- 3 -
AAAAnnnnwwwweeeennnnddddeeeerrrrhhhhaaaannnnddddbbbbuuuucccchhhh TTTTeeeeiiiillll IIII
0000.... VVVVoooorrrrbbbbeeeemmmmeeeerrrrkkkkuuuunnnngggg
Das Handbuch gliedert sich in 3 Teile. Im Teil 1 wird das
Referenz-Manual vorgestellt und einige grundsa"tzliche
Ausfu"hrungen zu den ING_DB 6.3/3-Komponenten Monitor- und
Makroprozessor gegeben, die fu"r das Versta"ndnis und die
Anwendung der Anfragesprache (Query Language = QUEL) von
Bedeutung sind. Im Teil 2 werden die im Referenz-Manual
beschriebenen Bestandteile ausfu"hrlicher dokumentiert und
zusa"tzliche Informationen bereitgestellt, um Zusammenha"nge
zwischen einzelnen Komponenten deutlicher zu gestalten. Es
sei darauf verwiesen, dass die im Anwenderhandbuch verwen-
deten Datenbanken als Demonstrationsbeispiele in der Ver-
triebsversion mit ausgeliefert werden. Nach dem U"berfliegen
von Teil 1 wird dem lernenden Anwender unbedingt das Studium
des 1. Kapitels im Teil 2 empfohlen, um gewisse
Zusammenha"nge zu erkennen. Die vertiefenden und
erweiternden Ausfu"hrungen mit Demonstrationsbeispielen im
Teil 3 sind in erster Linie fu"r Programmierer gedacht.
Es wurde versucht, das Studium der Dokumentation fu"r den
Lernenden zu erleichtern, indem die U"berschriften nach fol-
genden Kriterien gekennzeichnet wurden:
* Abschnitt entha"lt allgemein interessierende Informa-
tionen, die fu"r einen U"berblick unerla"sslich sind
** Abschnitt entha"lt Informationen fu"r anspruchsvolle
Anwender (bspw. Datenbankadministrator), die u"ber
Grundkenntnisse zur Programmierung und umfassendere
Kenntnisse zum Betriebssystem bzw. zur Shell verfu"gen.
*** Abschnitt entha"lt Informationen fu"r Programmierer, den
ING_DB -Systemadministrator.
ING_DB 6.3/3 beruht auf dem Modell der klassischen Rela-
tionentheorie die im Anwenderhandbuch jedoch nicht
ausgefu"hrt wird.
Es gelten folgende Begriffsanalogien:
----------------------------
Relation | Tupel | Doma"ne
Tabelle | Zeile | Spalte
Datei | Satz | Feld
----------------------------
ING_DB 6.3/3 Juni 16, 1989
Referenz_Manual - 4 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg
_1. RRRReeeeffffeeeerrrreeeennnnzzzz----MMMMaaaannnnuuuuaaaallll ****
Das ING_DB 6.3/3 Referenz-Manual ist in 5 Kapitel unter-
teilt:
QUEL beschreibt die Nutzung des interaktiven Systems nach
Start von qqqquuuueeeellll (unix), also die Statements der
Anfragesprache QUEL und den interaktiven Terminal-
Monitor mit seinem Makro-Prozessor.
UNIX beschreibt die ING_DB -Programme, die durch eine
interaktive Shell direkt als UNIX -Kommandos ausfu"hrbar
sind, darunter auch das Kommando qqqquuuueeeellll (unix) selbst.
REPORT beschreibt die Sprache zur Generierung von Druck-
listen und wird aufgrund des Umfangs als eigensta"ndiges
Kapitel behandelt.
FILES beschreibt die aus Anwendungssicht wichtigen Files von
ING_DB .
ERROR entha"lt eine Auflistung der nach Anwenderfehlbedie-
nungen mo"glichen Fehlermeldungen mit deren
Erla"uterungen.
Die Abschnitte in den Kapiteln dieses Handbuchs sind mit
KAPITEL (unten rechts)
und
ABSCHNITT (oben rechts)
gekennzeichnet, um ein schnelles Auffinden zu ermo"glichen.
Fu"r die Kapitel QUEL, UNIX und REPORT wird zu Beginn
jeweils eine Einfu"hrung gegeben, um die Einordnung der Kom-
mandos zu erleichtern. Diese Einfu"hrung ist wie ein Absch-
nitt gekennzeichnet, aber nicht so gegliedert.
Nachfolgend die allgemeine Gliederung im Sinne des Manuals:
ING_DB 6.3/3 Juni 16, 1989
Referenz_Manual - 5 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg
NNNNAAAAMMMMEEEE
Name - Kurzbezeichnung des Inhalts
SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
Hier wird die Syntax des Kommandos/Statements angege-
ben.
Als Metasymbole werden verwendet:
| Alternative
[..] wahlweise kein- oder einmal
{..} wahlweise kein- oder mehrmals
<..> manchmal zur Hervorhebung einer
syntaktischen Variablen
Alle anderen Sonderzeichen und fettgedruckten
Bezeichner sind terminale Symbole (mu"ssen so und nicht
anders geschrieben werden). Kleingeschriebene, nicht
fettgedruckte Wo"rter stehen fu"r syntaktische Variable,
deren Belegung im folgenden Abschnitt BESCHREIBUNG
erla"utert wird.
Die Mehrzahl der syntaktischen Variablen wird im Ab-
schnitt qqqquuuueeeellll eingefu"hrt. Insbesondere:
<<<<ddddbbbbnnnnaaaammmmeeee>>>> Name der aufliegenden Datenbank
<<<<rrrreeeellllnnnnaaaammmmeeee>>>> Name einer Relation, Tabelle
<<<<ddddoooommmmnnnnaaaammmmeeee>>>> Name einer Doma"ne einer Relation
BBBBEEEESSSSCCCCHHHHRRRREEEEIIIIBBBBUUUUNNNNGGGG
Hier wird die Syntax erga"nzt und eine semantische
Beschreibung gegeben.
NNNNAAAACCCCHHHHRRRRIIIICCCCHHHHTTTTEEEENNNN
Hier werden die Nachrichten erla"utert, die nicht im
Kapitel ERROR zu finden sind, oder die eine besondere
Bedeutung haben.
Nachrichten, die Folgen technischer Fehler sind und
i.d.R. zu einem Systemabbruch fu"hren, werden in dieser
Dokumentation nicht behandelt.
BBBBEEEEIIIISSSSPPPPIIIIEEEELLLL[[[[EEEE]]]]
Hier werden Beispiele angegeben, die den Rahmen dieses
Nachschlagewerkes nicht sprengen.
Viele Beispiele beziehen sich auf eine Personal-
Relation, die pro Mitarbeiter einen Satz mit den Spal-
ten.
ING_DB 6.3/3 Juni 16, 1989
Referenz_Manual - 6 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg
Relation: personal
---------
Besitzer: ing_db
Tupellaenge: 30
Verfallsdatum: Tue Apr 26 19:56:39 1988
Tupelanzahl: 25
Speicherstruktur: HEAP
Relationentyp: Nutzerrelation
Domaenname Typ Laenge Schluessel
-------------------------------------------
num i 2
name c 20
gehalt i 2
leiter i 2
gebdat i 2
einstdat i 2
-------------------------------------------
hat.
SSSSIIIIEEEEHHHHEEEE AAAAUUUUCCCCHHHH
Hier werden andere Abschnitte aufgeza"hlt, auf die Bezug
genommen wurde.
HHHHIIIILLLLFFFFEEEENNNN
Hier werden gewisse Besonderheiten, insbesondere der
Implementation beschrieben.
Um mit ING_DB arbeiten zu ko"nnen, muss jeder Nutzer
durch den ING_DB -Administrator in das usersfile
eingetragen werden (s. uuuusssseeeerrrrssss (files)).
Zur Einfu"hrung in dieses Handbuch beginne man mit den
Abschnitten AAAAnnnnffffrrrraaaaggggeeeesssspppprrrraaaacccchhhheeee , DDDDaaaatttteeeennnnbbbbaaaannnnkkkk----UUUUnnnniiiixxxx----KKKKoooommmmmmmmaaaannnnddddoooossss
und DDDDeeeerrrr iiiinnnntttteeeerrrraaaakkkkttttiiiivvvveeee TTTTeeeerrrrmmmmiiiinnnnaaaallll----MMMMoooonnnniiiittttoooorrrr
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 7 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg
_1._1. AAAAnnnnffffrrrraaaaggggeeeesssspppprrrraaaacccchhhheeee ****
_1._1._1. BBBBeeeesssscccchhhhrrrreeeeiiiibbbbuuuunnnngggg zzzzuuuurrrr AAAAnnnnffffrrrraaaaggggeeeesssspppprrrraaaacccchhhheeee QQQQuuuueeeellll vvvvoooonnnn IIIINNNNGGGG____DDDDBBBB
6666....3333////3333 ****
Der folgende Abschnitt ist eine Beschreibung der
grundsa"tzlichen Syntax von QUEL. Die einzelnen Statements
werden in gesonderten Abschnitten behandelt, hier nur die
Klassen syntaktischer Variablen, aus denen die QUEL-
Statements aufgebaut sind.
_1._1._1._1. KKKKoooommmmmmmmeeeennnnttttaaaarrrreeee ****
Ein Kommentar ist eine beliebige Zeichenfolge, eingebunden
links durch "/*" und rechts durch "*/":
/* Das ist ein Kommentar */
_1._1._1._2. NNNNaaaammmmeeeennnn ****
Namen in QUEL sind Folgen von maximal 12 alphanumerischen
Zeichen (Buchstaben oder Ziffern), beginnend mit einem
Buchstaben. Das Unterstreichungszeichen ("_", <underscore>)
gilt als Buchstabe. Alle grossen Buchstaben - mit Ausnahme
solcher in Zeichenketten - werden stillschweigend, automa-
tisch in die ihnen entsprechenden kleinen Buchstaben
umgewandelt.
_1._1._1._3. SSSScccchhhhlllluuuu""""sssssssseeeellllwwwwoooorrrrtttteeee ****
Die folgenden Bezeichner sind als Schlu"sselworte reserviert
und du"rfen nicht anderweitig verwendet werden:
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 8 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg
abs all and
any append ascii
at atan avg
avgu by concat
copy cos count
countu create dba
define delete destroy
distribute exp float4
float8 from help
in index integrity
int1 int2 int4
into is log
max min mod
modify not of
on onto or
permit print range
replace retrieve save
sin sqrt sum
sumu to unique
until usercode view
where
_1._1._1._4. KKKKoooonnnnssssttttaaaannnntttteeeennnn ****
Entsprechend den drei, in QUEL verfu"gbaren Datentypen, gibt
es drei Typen von Konstanten.
_1._1._1._4._1. ZZZZeeeeiiiicccchhhheeeennnnkkkkeeeetttttttteeeennnn----KKKKoooonnnnssssttttaaaannnntttteeeennnn ((((SSSSttttrrrriiiinnnnggggssss)))) ****
Zeichenketten in QUEL sind Folgen von maximal 255 ASCII-
Zeichen, eingebunden in die (doppelten !) Anfu"hrungsstriche
( " " ). Grosse Buchstaben innerhalb von Zeichenketten
bleiben, so wie sie sind, erhalten. Bei Verwendung des
Begrenzers " innerhalb von Zeichenketten ( als deren Bes-
tandteil ), muss diesem ein <backslash> ( "\" )
vorangestellt werden. Das muss auch fu"r <backslash> selbst
erfolgen. (s. auch Abschnitt "Pattern matching ..")
Innerhalb von Zeichenketten du"rfen nur druckbare Zeichen
verwendet werden. Nicht druckbare Zeichen
(control_character) werden in Leerzeichen <blank> konver-
tiert.
_1._1._1._4._2. GGGGaaaannnnzzzzzzzzaaaahhhhlllliiiiggggeeee KKKKoooonnnnssssttttaaaannnntttteeeennnn ((((IIIInnnntttteeeeggggeeeerrrr)))) ****
Ganzzahlige Konstanten liegen im Wertebereich von
-2 147 483 648 bis +2 147 483 647. Ganzzahlige Konstanten
ausserhalb dieses Wertebereiches werden in eine Gleitkomma-
Darstellung umgewandelt. Wenn die ganzzahlige Konstante
kleiner als 32 768 und gro"sser als -32 769 ist, wird sie als
eine 2-Byte-Integer dargestellt, anderenfalls wird sie in
eine 4-Byte-Integer konvertiert.
_1._1._1._4._3. GGGGlllleeeeiiiittttkkkkoooommmmmmmmaaaa---- ((((ffffllllooooaaaattttiiiinnnngggg____ppppooooiiiinnnntttt)))) KKKKoooonnnnssssttttaaaannnntttteeeennnn ****
Gleitkomma-Konstanten werden mit einem ganzen Teil, dem De-
zimalpunkt(!), einem gebrochenen Teil (zusammen als Mantisse
bezeichnet) und einem Exponenten formuliert. Genauer gesagt
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 9 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg
werden sie in folgendem Format geschrieben:
{<dig>} [.<dig>] [eE [+-] {<dig>}]
Im obigen speziellen Fall steht <dig> fu"r eine beliebige
Ziffer. Ein Exponent ohne Mantisse erha"lt die Mantisse 1
zugeordnet. Innerhalb einer Gleitkomma-Konstanten du"rfen
keine weiteren Zeichen eingebettet werden. Gleitkomma-
Konstanten werden in doppelter Genauigkeit mit einem Wer-
tebereich von anna"hernd -10**38 bis +10**38 und einer
Genauigkeit von 17 Dezimalziffern dargestellt.
_1._1._1._5. KKKKoooonnnnssssttttaaaannnntttteeee OOOOppppeeeerrrraaaattttoooorrrreeeennnn
Die konstanten Operatoren sind Operatoren, die Konstanten
liefern. ddddbbbbaaaa liefert den Datenbankadministrator der verwen-
deten Datenbanken und uuuusssseeeerrrrccccooooddddeeee den gerade aktiven Nutzer.
<<<<ddddbbbbaaaa>>>>
<<<<uuuusssseeeerrrrccccooooddddeeee>>>>
Sie liefern in der Ersetzung den String fu"r den <dba> bzw.
den <usercode>.
_1._1._1._6. AAAAttttttttrrrriiiibbbbuuuutttteeee <<<<aaaattttttttrrrriiiibbbbuuuutttteeee>>>> ****
Ein Attribut <attribute> ist ein Konstrukt der Form:
<tuple_variable>.<domname>
<<<<ttttuuuupppplllleeee____vvvvaaaarrrriiiiaaaabbbblllleeee>>>> identifiziert eine bestimmte Relation. Man
kann den Bezeichner <<<<ttttuuuupppplllleeee____vvvvaaaarrrriiiiaaaabbbblllleeee>>>> auffassen, als stu"nde
er fu"r die Zeilen bzw. Tupel dieser Relation. Eine Variable
wird einer Relation durch Verwendung des rrrraaaannnnggggeeee---- Statements
zugeordnet. <<<<ddddoooommmmnnnnaaaammmmeeee>>>> ist der Name einer der Spalten der
Relation, u"ber der die Variable definiert ist. Damit
bezeichnet das Konstrukt ein Attribut, das einen Wert aus
der Doma"ne repra"sentiert.
_1._1._1._7. AAAArrrriiiitttthhhhmmmmeeeettttiiiisssscccchhhheeee OOOOppppeeeerrrraaaattttoooorrrreeeennnn ****
Arithmetische Operatoren haben Ausdru"cke von numerischem
Format als Operanden. Einstellige Operatoren gruppieren von
rechts nach links; zweistellige Operatoren gruppieren von
links nach rechts. Die Operatoren - in der Reihenfolge
absteigende Bindungssta"rke - sind:
+,- (einstellig) plus, minus
** Potenzierung
*,/ Multiplikation, Division
+,- (zweistellig) Addition, Subtraktion
In weiter abfallender Bindungssta"rke schliessen sich hieran
die weiter hinten aufgefu"hrten Operatoren:
<comparison_operator>
<logical_operator>
Klammern ( ) sind fu"r eine spezielle Festlegung der Bindung
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 10 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg
der Operatoren einzusetzen. Bei ganzzahligen Operationen
wird der arithmetische U"berlauf und die Division durch Null
nicht gepru"ft. Bei Gleitkomma-Operationen wird U"berlauf,
Unterlauf und Division durch Null nur gepru"ft, wenn die
entsprechende Hardware existiert und aktiv ist.
_1._1._1._8. AAAAuuuussssddddrrrruuuu""""cccckkkkeeee <<<<aaaa____eeeexxxxpppprrrr>>>> ****
Ein Ausdruck ist entweder/oder ein(e):
Konstante
Attribut
Funktionaler Ausdruck
Aggregat oder Aggregat-Funktion
Kombination von numerischen Ausdru"cken und
arithmetischen Operatoren
Innerhalb dieses Handbuchs wird ein beliebiger Ausdruck als
<<<<aaaa____eeeexxxxpppprrrr>>>> bezeichnet.
_1._1._1._9. FFFFoooorrrrmmmmaaaatttteeee <<<<ffffoooorrrrmmmmaaaatttt>>>> ****
Jeder <<<<aaaa____eeeexxxxpppprrrr>>>> hat ein Format <format>, das durch einen
Buchstaben (cccc,,,, iiii oder ffff,,,, fu"r Zeichenfolgen (character),
ganze Zahlen (integer) oder Gleitkomma-Daten(float) ) und
eine Ziffer, die die Anzahl der zur Speicherung no"tigen
Bytes anzeigt, bezeichnet wird. Die unterstu"tzten Formate
sind folgend aufgeza"hlt, der Wertebereich der numerischen
Formate ist in Klammern angegeben.
c1 - c255 Zeichenketten von 1-255 Bytes La"nge
i1 1-Byte Integer (-128 bis +127)
i2 2-Byte Integer (-32768 bis +32767)
i4 4-Byte Integer (-2 147 483 448 bis
+2 147 483 647)
f4 4-Byte floating (-10**38 bis +10**38,
7 Dezimalen Genauigkeit)
f8 8-Byte floating (-10**38 bis +10**38,
17 Dezimalen Genauigkeit)
Eine Variable von numerischem Format kann einer jeden
anderen numerischen Formats zugewiesen werden, sie wird
dabei konvertiert.
_1._1._1._1_0. FFFFoooorrrrmmmmaaaatttt KKKKoooonnnnvvvveeeerrrrttttiiiieeeerrrruuuunnnngggg ****
Bei Operationen u"ber zwei numerische Doma"nen von unter-
schiedlichem Format fu"hrt ING_DB automatisch die notwendi-
gen Konvertierungen durch.
Bei Operationen zwischen einem ganzzahligen Operanden und
einem Gleitkomma Operanden wird der ganzzahlige vor der
Operation in Gleitkomma umgewandelt. Bei Operationen
zwischen zwei ganzzahligen Operanden unterschiedlicher La"nge
wird der ku"rzere auf die La"nge des la"ngeren konvertiert.
Bei Operationen zwischen zwei Gleitkomma Operanden unter-
schiedlicher Genauigkeit wird der la"ngere in die Genauigkeit
des ku"rzeren konvertiert.
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 11 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg
Die folgende Tabelle gibt alle mo"glichen Kombinationen an:
i1 i2 i4 f4 f8
i1 - i1 i2 i4 f4 f8
i2 - i2 i2 i4 f4 f8
i4 - i4 i4 i4 f4 f8
f4 - f4 f4 f4 f4 f4
f8 - f8 f8 f8 f4 f8
ING_DB unterstu"tzt die folgenden Konvertierungsoperatoren,
die man an Stelle der o.g. automatischen Standardaktionen
einsetzen kann:
int1(<a_expr>) Resultat hat Format i1
int2(<a_expr>) Resultat hat Format i2
int4(<a_expr>) Resultat hat Format i4
float4(<a_expr>) Resultat hat Format f4
float8(<a_expr>) Resultat hat Format f8
Die Konvertierungsoperatoren konvertieren ihr Argument
<a_expr> also in das von ihnen bezeichnete Format. <<<<aaaa____eeeexxxxpppprrrr>>>>
kann irgendwelche Zeichen enthalten. Wenn ein Zeichen nicht
konvertiert werden kann, wird ein Fehler angezeigt und die
Berechnung abgebrochen - das kann nur eintreten, wenn die
Syntax fu"r den zu konvertierenden <<<<aaaa____eeeexxxxpppprrrr>>>> nicht eingehalten
wurde.
U"berlauf wird bei Konvertierungen nicht gepru"ft.
_1._1._1._1_1. ZZZZiiiieeeelllllllliiiisssstttteeee <<<<ttttaaaarrrrggggeeeetttt____lllliiiisssstttt>>>> ****
Eine <<<<ttttaaaarrrrggggeeeetttt____lllliiiisssstttt>>>> ist eine geklammerte Liste von einem oder
mehreren Elementen, die untereinander durch Kommata getrennt
werden. Jedes ihrer Elemente muss eines der folgend
aufgeza"hlten sein:
a) <domname> iiiissss <a_expr>
<domname> ist hier der Name einer Doma"ne, die erzeugt
werden soll (oder die, im Falle von update-Statements,
bereits existiert). Das Gleichheitszeichen ( "=" ) ist
gleichbedeutend mit iiiissss.... In dem Falle, wo <a_expr> kein
einfaches Attribut ist, muss diese Form benutzt werden,
um den Ausdruck einem namentlich angegebenem Resultat
zuzuordnen.
b) <attribute>
Im Falle eines rrrreeeettttrrrriiiieeeevvvveeee----Statements wird als Ergeb-
nisspalte die angenommen, die den gleichen Namen, wie
der dabei angegebene <domname> hat. Im Falle von
update-Statements (aaaappppppppeeeennnndddd,,,, rrrreeeeppppllllaaaacccceeee), muss die zu
vera"ndernde Relation eine Doma"ne mit genau dem
bezeichneten Namen aufweisen.
Innerhalb einer <target_list> kann das Schlu"sselwort aaaallllllll
dazu benutzt werden, alle Doma"nen zu bezeichnen. Zum
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 12 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg
Beispiel
range of p is personal
retrieve (p.all) where p.gehalt > 1000
sucht alle Tupel der Relation personal, die die Bedingung
<qualification>: gehalt > 1000 erfu"llen. aaaallllllll kann in der
<target_list> von rrrreeeettttrrrriiiieeeevvvveeee---- oder aaaappppppppeeeennnndddd---- Statements benutzt
werden. Die Doma"nen werden in ihrer erzeugten Reihenfolge
eingesetzt, d.h. in der, in der sie mit dem ccccrrrreeeeaaaatttteeee---- State-
ment erzeugt wurden.
_1._1._1._1_2. VVVVeeeerrrrgggglllleeeeiiiicccchhhhssssooooppppeeeerrrraaaattttoooorrrreeeennnn <<<<ccccoooommmmppppaaaarrrriiiissssoooonnnn____ooooppppeeeerrrraaaattttoooorrrr>>>>
uuuunnnndddd KKKKllllaaaauuuusssseeeellllnnnn <<<<ccccllllaaaauuuusssseeee>>>> ****
Es gibt Vergleichsoperatoren <comparison_operator>, die
beliebige Ausdru"cke <a_expr> als Operanden haben:
< (kleiner als)
<= (kleiner als oder gleich)
> (gro"sser als)
>= (gro"sser als oder gleich)
= (gleich mit)
!= (ungleich zu)
Diese Operatoren sind alle von gleicher Bindungssta"rke. Bei
Vergleichen zwischen Zeichenketten werden alle Leerzeichen
<blank> innerhalb der Zeichenketten ignoriert.
Eine Klausel <clause> ist ein Paar von Ausdru"cken, die durch
einen Vergleichsoperator verknu"pft sind:
<a_expr> <comparison_operator> <a_expr>
_1._1._1._1_3. LLLLooooggggiiiisssscccchhhheeee OOOOppppeeeerrrraaaattttoooorrrreeeennnn <<<<llllooooggggiiiiccccaaaallll____ooooppppeeeerrrraaaattttoooorrrr>>>>
uuuunnnndddd QQQQuuuuaaaalllliiiiffffiiiikkkkaaaattttiiiioooonnnn <<<<qqqquuuuaaaalllliiiiffffiiiiccccaaaattttiiiioooonnnn>>>>
((((aaaauuuucccchhhh <<<<qqqquuuuaaaallll>>>>)))) ****
Logische Operatoren haben Klauseln (<clause>) als Operanden.
Sie gruppieren von links nach rechts.
not (logische Negation)
and (logisches und; Konjunktion)
or (logisches inclusives oder; Disjunktion)
nnnnooootttt hat von den drei Operatoren die ho"chste Bindungssta"rke.
aaaannnndddd und oooorrrr haben die gleiche Bindungssta"rke. Klammern ( )
kann man fu"r eine spezielle Bindung einsetzen.
Eine <<<<qqqquuuuaaaalllliiiiffffiiiiccccaaaattttiiiioooonnnn>>>> besteht aus einer Anzahl von Klauseln
<clause>, die durch logische Operatoren verknu"pft sind.
Eine <qualification> kann damit sein:
<<<<ccccllllaaaauuuusssseeee>>>>
nnnnooootttt <<<<qqqquuuuaaaalllliiiiffffiiiiccccaaaattttiiiioooonnnn>>>>
<<<<qqqquuuuaaaalllliiiiffffiiiiccccaaaattttiiiioooonnnn>>>> oooorrrr <<<<qqqquuuuaaaalllliiiiffffiiiiccccaaaattttiiiioooonnnn>>>>
<<<<qqqquuuuaaaalllliiiiffffiiiiccccaaaattttiiiioooonnnn>>>> aaaannnndddd <<<<qqqquuuuaaaalllliiiiffffiiiiccccaaaattttiiiioooonnnn>>>>
( <<<<qqqquuuuaaaalllliiiiffffiiiiccccaaaattttiiiioooonnnn>>>> )
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 13 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg
_1._1._1._1_4. FFFFuuuunnnnkkkkttttiiiioooonnnnaaaalllleeee AAAAuuuussssddddrrrruuuu""""cccckkkkeeee <<<<ffffuuuunnnnccccttttiiiioooonnnnaaaallll____eeeexxxxpppprrrreeeessssssssiiiioooonnnn>>>> ****
Ein <<<<ffffuuuunnnnccccttttiiiioooonnnnaaaallll eeeexxxxpppprrrreeeessssssssiiiioooonnnn>>>> ist ein Konstrukt, bestehend aus
einem Funktionsnamen, gefolgt von einem eingeklammerten
Operanden oder einer eingeklammerten Liste durch Kommata
getrennter Operanden. Funktionale Ausdru"cke ko"nnen in
beliebiger Tiefe geschachtelt werden. In der folgenden
Aufza"hlung der unterstu"tzten Funktionen repra"sentiert (nnnn )
einen beliebigen Ausdruck von numerischem Format. Das
Resultat-Format ist rechts angezeigt.
abs(n) - dasselbe wie n (Absolutwert)
ascii(n) - Zeichenkette (konvertiert numerisch in
Zeichen)
atan(n) - f8 (arctangens)
concat(a,b) - Zeichenkette (Verkettung)
cos(n) - f8 (cosinus)
exp(n) - f8 (n. Potenz von e)
log(n) - f8 (natu"rlicher Logarithmus)
mod(n,b) - dasselbe wie b (n modulo b, n und b
mu"ssen vom Format i1, i2 oder i4 sein
sin(n) - f8 (sinus)
sqrt(n) - f8 (Quadratwurzel)
_1._1._1._1_5. AAAAggggggggrrrreeeeggggaaaatttt----AAAAuuuussssddddrrrruuuu""""cccckkkkeeee ****
Aggregat-Ausdru"cke ermo"glichen es, u"ber einer Menge von
Seiten zusammengefasste Werte zu berechnen.
_1._1._1._1_5._1. AAAAggggggggrrrreeeeggggaaaatttt----OOOOppppeeeerrrraaaattttoooorrrreeeennnn <<<<aaaaggggggggrrrreeeeggggaaaattttiiiioooonnnn____ooooppppeeeerrrraaaattttoooorrrr>>>> ****
Folgende Aggregat-Operatoren und ihr Resultat-Format sind
definiert.
count - (i4) Anzahl von Vorkommen
countu - (i4) Anzahl von einmaligen (unique) Vorkommen
sum - Summierung
sumu - Summierung aller unterschiedlichen Werte
avg - (f8) Durchschnitt (average) (sum/count)
avgu - (f8) unique average (sumu/countu)
max - Maximum
min - Minimum
any - (i2) ergibt 1, sobald sich ein Tupel qualifiziert,
sonst 0
_1._1._1._1_5._2. EEEEiiiinnnnffffaaaacccchhhheeee AAAAggggggggrrrreeeeggggaaaatttteeee <<<<ssssiiiimmmmpppplllleeee____aaaaggggggggrrrreeeeggggaaaatttteeee>>>> ****
<<<<aaaaggggggggrrrreeeeggggaaaattttiiiioooonnnn____ooooppppeeeerrrraaaattttoooorrrr>>>> (<<<<aaaa____eeeexxxxpppprrrr>>>>
[ wwwwhhhheeeerrrreeee <<<<qqqquuuuaaaalllliiiiffffiiiiccccaaaattttiiiioooonnnn>>>> ] )
Ein einfaches Aggregat erzeugt einen einzelnen skalaren
Wert. <<<<aaaa____eeeexxxxpppprrrr>>>> wird u"ber der Menge der Tupel aggregiert,
die die <<<<qqqquuuuaaaalllliiiiffffiiiiccccaaaattttiiiioooonnnn>>>> erfu"llen (oder u"ber alle Tupel im
Geltungsbereich des Ausdrucks, wenn keine <qualification>
angegeben ist). Die Operatoren ssssuuuummmm und aaaavvvvgggg verlangen
<<<<aaaa____eeeexxxxpppprrrr>>>> in numerischem Format; ccccoooouuuunnnntttt,,,, aaaannnnyyyy,,,, mmmmaaaaxxxx und mmmmiiiinnnn
arbeiten sowohl auf Zeichenketten, als auch auf <<<<aaaa____eeeexxxxpppprrrr>>>> von
numerischem Format.
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 14 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg
EEEEiiiinnnnffffaaaacccchhhheeee AAAAggggggggrrrreeeeggggaaaatttteeee ssssiiiinnnndddd vvvvoooollllllllssssttttaaaa""""nnnnddddiiiigggg llllooookkkkaaaallll,,,, d.h. sie werden
logisch von der u"brigen Anfrage abgetrennt, separat
berechnet und danach in der Anfrage durch ihren skalaren
Wert ersetzt.
_1._1._1._1_5._3. DDDDaaaassss aaaannnnyyyy AAAAggggggggrrrreeeeggggaaaatttt ****
Manchmal mo"chte man wissen, ob es Tupel gibt, die eine be-
stimmte <qualification> erfu"llen. Eine Mo"glichkeit, das zu
erfahren, bietet die Benutzung des ccccoooouuuunnnntttt---- Aggregates, nach
welchem man dann pru"fen kann, ob sich Tupel qualifizieren.
Die Benutzung von aaaannnnyyyy anstelle von ccccoooouuuunnnntttt ist deshalb
effizienter, weil dabei die Berechnung abgebrochen wird,
sobald das erste sich qualifizierende Tupel gefunden wurde.
aaaannnnyyyy gibt 1 zuru"ck, wenn sich mindestens ein Tupel quali-
fiziert und sonst 0.
_1._1._1._1_5._4. AAAAggggggggrrrreeeeggggaaaatttt----FFFFuuuunnnnkkkkttttiiiioooonnnneeeennnn ****
<<<<aaaaggggggggrrrreeeeggggaaaattttiiiioooonnnn____ooooppppeeeerrrraaaattttoooorrrr>>>> (<<<<aaaa____eeeexxxxpppprrrr>>>> bbbbyyyy <<<<bbbbyyyy____ddddoooommmmnnnnaaaammmmeeee>>>>
{{{{,,,, <<<<bbbbyyyy____ddddoooommmmnnnnaaaammmmeeee>>>>}}}} [ wwwwhhhheeeerrrreeee <<<<qqqquuuuaaaalllliiiiffffiiiiccccaaaattttiiiioooonnnn>>>> ] )
Aggregat-Funktionen sind Verallgemeinerungen der einfachen
Aggregate. Die bbbbyyyy---- Phrase gruppiert (d.h. portioniert) die
Menge der sich qualifizierenden Tupel nach den Werten der
<<<<bbbbyyyy____ddddoooommmmnnnnaaaammmmeeee>>>> (das ist ein <domname>). Bei Angabe von mehr
als einem <<<<bbbbyyyy____ddddoooommmmnnnnaaaammmmeeee>>>>,,,, sind die durch bbbbyyyy gruppierten Werte
die Verkettung der einzelnen <<<<bbbbyyyy____ddddoooommmmnnnnaaaammmmeeee>>>>.... <<<<aaaa____eeeexxxxpppprrrr>>>> gilt
wie bei einfachen Aggregaten. Eine Aggregat-Funktion ergibt
eine Menge von Aggregaten, je eines fu"r jede Portion, in die
die Menge der sich qualifizierenden Tupel gruppiert wurde.
Das Aggregat, das wa"hrend der Berechnung der Query jeweils
benutzt wird, ist das, das der Portion zugeordnet ist, in
das das jeweils gerade behandelte Tupel fa"llt.
Anders als bei einfachen Aggregaten sind Aggregat-Funktionen
nicht vollsta"ndig lokal. Die by-Phrase, durch welche sich
eine Aggregat-Funktion von einfachen Aggregaten unter-
scheidet, ist fu"r die Query global. Doma"nen in der by-
Phrase werden automatisch an andere Doma"nen der gleichen
Relation gebunden, sofern solche in der Query vorkommen.
Zum Beispiel:
/* Bilde das Durchschnittsgehalt fu"r
die Angestellten einer Abteilung */
range of p is personal
retrieve (p.abteilung,
dgehalt=avg(p.gehalt by p.abteilung))
_1._1._1._1_5._5. AAAAggggggggrrrreeeeggggaaaatttteeee uuuu""""bbbbeeeerrrr """"eeeeiiiinnnnmmmmaaaalllliiiiggggeeee""""----WWWWeeeerrrrtttteeee ****
Ha"ufig ist es notwendig, nur u"ber die vvvveeeerrrrsssscccchhhhiiiieeeeddddeeeennnneeeennnn Werte
eines Ausdrucks zu aggregieren. Die aaaavvvvgggguuuu , ssssuuuummmmuuuu und ccccoooouuuunnnnttttuuuu
Aggregate unterdru"cken alle mehrfach auftretenden Werte,
bevor das Aggregat gebildet wird. Zum Beispiel:
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 15 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg
count(p.abteilung)
wu"rde ermitteln, wie oft in den, in unserem Beispiel pro
Angestellten angelegten Tupeln, das Attribut """"pppp....aaaabbbbtttteeeeiiiilllluuuunnnngggg""""
mit Werten belegt ist. Aber
countu(p.abteilung)
erst wu"rde za"hlen, wieviele unterschiedliche Werte fu"r die
Doma"ne pppp....aaaabbbbtttteeeeiiiilllluuuunnnngggg existieren (wofu"r man sich wahrscheinlich
auch in diesem Beipiel interessiert).
_1._1._1._1_6. SSSSppppeeeezzzziiiiffffiiiisssscccchhhheeee ZZZZeeeeiiiicccchhhheeeennnnkkkkeeeetttttttteeeennnn----OOOOppppeeeerrrraaaattttoooorrrreeeennnn ****
Es werden drei speziell fu"r die Arbeit mit Zeichenketten
eingerichtete Arbeitsmo"glichkeiten unterstu"tzt:
_1._1._1._1_6._1. MMMMuuuusssstttteeeerrrrssssuuuucccchhhheeee aaaauuuuffff ZZZZeeeeiiiicccchhhheeeennnnkkkkeeeetttttttteeeennnn
((((""""PPPPaaaatttttttteeeerrrrnnnn mmmmaaaattttcccchhhhiiiinnnngggg"""")))) ****
Es gibt vier Zeichen, die eine spezielle Bedeutung haben,
wenn sie innerhalb von Zeichenketten-Konstanten (strings)
einer <qualification> eingesetzt werden:
* symbolisiert eine Zeichenkette von einem oder
mehreren Zeichen.
? symbolisiert ein einzelnes, beliebiges Zeichen.
[..] symbolisiert eines der, in den Klammern aufgeza"hlten
Zeichen. Von "-" bis Angaben sind erlaubt.
Diese Zeichen kann man in beliebigen Kombinationen benutzen,
um eine Vielzahl von Tests zu formulieren. Zum Beispiel:
where p.name = "*" - qualifiziert jeden beliebigen Namen.
where p.name = "E*" - qualifiziert einen, mit "E" beginnen-
den, sonst beliebigen Namen.
where p.name = "*ung" - qualifiziert alle Namen, die auf
"ung" enden.
where p.name = "*[aeiou]*" - qualifiziert alle Namen, die
irgendwo einen kleingeschriebenen Vokal enthalten.
where p.name = "Schul?" - qualifiziert alle 6 Zeichen langen
Namen, die mit "Schul" beginnen.
where p.name = "[A-J]*" - qualifiziert alle Namen, die mit
A,B,..,J beginnen.
Die spezielle Bedeutung der pattern_matching-Zeichen wird
aufgehoben, wenn man ihnen ein <backslash> ( "\" ) voran-
stellt. So bezeichnet "\*" das Zeichen "*". Pattern-
matching-Zeichen in einer <target_list> mu"ssen immer durch
"\" kaschiert werden. Zum Beispiel:
titel = "\*\*\* muster \*\*\*"
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 16 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg
ist die korrekte Art, die Kette "*** muster ***" der Doma"ne
"titel" zuzuweisen.
_1._1._1._1_6._2. VVVVeeeerrrrkkkkeeeettttttttuuuunnnngggg ****
Es gibt einen Verkettungs- (concatenation) Operator, mit dem
man aus zwei Zeichenketten eine bilden kann. Seine Syntax
ist
concat(feld1, feld2)
Die La"nge der neuen Zeichenkette ist die Summe der La"ngen
der beiden Quellketten. In feld1 hinten stehende Leerzeichen
werden unterdru"ckt, feld2 wird angekettet und die Ergeb-
niskette wird hinten mit Leerzeichen aufgefu"llt. Ver-
kettungen ko"nnen beliebig in andere Verkettungen
geschachtelt werden. Zum Beipiel:
name = concat(concat(x.nachname, ","), x.vorname)
verkettet den Nachnamen mit einem Komma und kettet daran den
Vornamen.
_1._1._1._1_6._3. aaaasssscccciiiiiiii ---- nnnnuuuummmmeeeerrrriiiisssscccchhhh zzzzuuuu
ZZZZeeeeiiiicccchhhheeeennnnkkkkeeeetttttttteeeennnn wwwwaaaannnnddddeeeellllnnnn ****
Die aaaasssscccciiiiiiii Funktion kann benutzt werden, um ein numerisches
Feld in eine Zeichenketten-Darstellung zu u"berfu"hren - das
kann nu"tzlich sein, wenn die Aufgabe steht, ein numerisches
Feld mit einem Zeichenkettenfeld zu vergleichen. Zum
Beipiel:
retrieve ( ... )
where x.chardomname = ascii(x.numdomname)
aaaasssscccciiiiiiii kann auf einen Zeichenketten-Wert angewandt werden;
das Ergebnis ist die ungea"nderte Zeichenkette. Das Konver-
tierungsformat wird durch das Druckformat (printing_format,
s. quel(unix)) bestimmt.
SSSSIIIIEEEEHHHHEEEE AAAAUUUUCCCCHHHH
append(quel), delete(quel), range(quel), replace(quel),
retrieve(quel), quel(unix)
HHHHIIIILLLLFFFFEEEENNNN
Die maximale Anzahl von Variablen, die in einer Anfrage
benutzt werden kann, ist 10.
Numerischer U"berlauf, Unterlauf und Division durch Null
werden nicht entdeckt.
Bei der Konvertierung numerischer Formate wird ein
U"berlauf nicht entdeckt.
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 17 - MMMMoooonnnniiiittttoooorrrr
_1._1._2. DDDDeeeerrrr iiiinnnntttteeeerrrraaaakkkkttttiiiivvvveeee TTTTeeeerrrrmmmmiiiinnnnaaaallll----MMMMoooonnnniiiittttoooorrrr ****
_1._1._2._1. IIIInnnnhhhhaaaalllltttt uuuunnnndddd LLLLeeeeiiiissssttttuuuunnnngggg ****
Der interaktive Terminal-Monitor ist der front-end-Prozess
von ING_DB . Er ermo"glicht es, eine Anfrage zu formulieren
und sie zu erga"nzen, bevor sie ING_DB u"bergeben wird. Zur
Ausfu"hrung von A"nderungen an der Anfrage im """"MMMMoooonnnniiiittttoooorrrr----PPPPuuuuffffffffeeeerrrr""""
kann ein UNIX - Text-Editor nach eigener Wahl benutzt wer-
den.
_1._1._2._2. NNNNaaaacccchhhhrrrriiiicccchhhhtttteeeennnn uuuunnnndddd PPPPrrrroooommmmpppptttt----MMMMeeeelllldddduuuunnnnggggeeeennnn ****
Der Terminal-Monitor gibt eine Reihe von Meldungen ab, um
den Nutzer u"ber den Status des Monitors und des
Monitor-Puffers zu informieren.
Nach Anmeldung des Nutzers wird eine login-Nachricht aus-
gegeben, die die Versionsnummer von ING_DB und die
login-Zeit anzeigt. Ihr folgt die Ausgabe des dayfile, das
Informationen fu"r alle Nutzer entha"lt.
Sobald ING_DB eingabebereit ist, wird die Meldung
ING-db>
*
ausgegeben. Sie zeigt an, dass der Monitor-Puffer leer ist.
Die Meldung
ING-db:
*
zeigt an, dass der Monitor-Puffer noch Informationen
entha"lt. Nach einem \go-Kommando wird der Monitor-Puffer
automatisch gelo"scht (autoclear-Funktion), sobald nachfol-
gend eine weitere Anfrage eingegeben wird, nicht aber, wenn
danach zuerst ein Kommando folgt, das sich auf den
Monitor-Puffer bezieht. Solche Kommandos sind \append,
\edit, \print, \list, \eval und \go. Wenn man z.B. eingibt:
help parts
\go
print parts
entha"lt der Monitor-Puffer
print parts
Wenn man dagegen eingibt
help parts
\go
\print
print parts
entha"lt der Monitor-Puffer
help parts
print parts
Am Anfang jeder Eingabe-Zeile wird der 2. Prompt von ING_DB
, in der Regel ein Stern ("*"), ausgegeben, sobald der Moni-
tor auf eine Eingabe des Nutzers wartet.
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 18 - MMMMoooonnnniiiittttoooorrrr
_1._1._2._3. KKKKoooommmmmmmmaaaannnnddddoooossss ****
Es gibt eine Anzahl von Kommandos, die vom Nutzer eingesetzt
werden ko"nnen, um mit dem Monitor-Puffer zu arbeiten oder
die Nutzer-Umgebung einzurichten. Kommandos beginnen mit
dem Kommandokennzeichen, in der Regel mit einem <backslash>
("\"). Monitor-Kommandos werden unverzu"glich ausgefu"hrt.
Einige Kommandos haben einen Parameter. Dieser besteht aus
den signifikanten Zeichen nach dem Kommando bis zum
Zeilenende. Hinter solchen Kommandos kann kein anderes Kom-
mando auf der gleichen Zeile folgen. Kommandos ohne Parame-
ter ko"nnen auf einer Zeile gepackt werden; zum Beispiel
\date\go\date
gibt die Zeit vor und nach der Ausfu"hrung der im
Monitor-Puffer enthaltenen Query aus.
LLLLiiiisssstttteeee ddddeeeerrrr KKKKoooommmmmmmmaaaannnnddddoooossss
\m
\monitor [parm]
Kommandokennzeichen einstellen
Der Parameter ist das Kennzeichen. Wenn er fehlt, wird
der Standard eingesetzt.
\r
\reset
Lo"schen der Anfrage. Der formulierte Inhalt des
Monitor-Puffers ist unwiederbringlich verloren.
\H
\HELP [parm]
Es wird eine la"ngere Dokumentation als Hilfe angezeigt.
Die Paramter sind mit denen von manr(unix) identisch.
\p
\print
Druck der anliegenden Query. Der Inhalt des
Monitor-Puffers wird auf dem Nutzer-Terminal ausgege-
ben.
\l
\list
Druck der anliegenden Query in der Form, wie sie nach
ihrer Transformation durch den Makro-Prozessor aus-
sieht. Einige Nebeneffekte bei der Arbeit des
Makro-Prozessors, wie die Definition von Makros werden
dabei mit ausgefu"hrt.
\v
\eval
Makro-Bearbeitung des Monitor-Puffers. Das Kommando
dient der Definition von Makros. Der Monitor-Puffer
wird anschliessend gelo"scht.
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 19 - MMMMoooonnnniiiittttoooorrrr
\e
\ed
\edit [parm]
\editor
Ruf eines frei wa"hlbaren UNIX -Text-Editors zum Edi-
tieren des Monitor-Puffers (s. auch ED, EM, VI, RAND im
UNIX Programmer's Manual). Nach Beendigung der Edi-
torarbeit kehrt man automatisch in den Monitor zuru"ck.
Der Monitorpuffer erha"lt jetzt den editierten Stand.
Wenn dem \e-Monitor-Kommando ein Parameter gegeben
wird, wird nicht der Monitor-Puffer sondern das, durch
den Parameter bezeichnete File zum editierenden File.
Wenn der Editor mit dem Monitor-Puffer
gestartet wird, muss zu dessen A"nderung natu"rlich ein
w-Editor-Kommando gegeben werden, ehe man dem
Editor ein anderes File zuordnet. Wenn der Makro
"{editor}" definiert ist, wird dieser Makro als ein
Pfadname fu"r einen speziellen Editor genommen, anderen-
falls wird der installationsabha"ngige Systemeditor
benutzt.
\g
\go
Ausfu"hrung der anliegenden Query. Der Inhalt des
Monitor-Puffers wird von der Auflo"sung der Makros
{begintrap} und {endtrap} umgeben, durch den
Makro-Prozessor transformiert und ING_DB u"bermittelt
und ausgefu"hrt. Bei Ausfu"hrung der tupelorientierten
Statements rrrreeeettttrrrriiiieeeevvvveeee , aaaappppppppeeeennnndddd , rrrreeeeppppllllaaaacccceeee und ddddeeeelllleeeetttteeee wird
der Makro {tuplecount} mit der Anzahl der bearbeiteten
Tupel definiert (sonst und im Fehlerfall als -1). Vor
Ru"ckkehr in den Eingabemodus ruft der Monitor den Makro
{continuetrap}.
\a
\append
Anfu"gen an den Monitor-Puffer. Das Kommando \a
u"berschreibt nach Ausfu"hrung einer Query die
auto_clear-Funktion und garantiert, dass der
Monitor-Puffer nicht gelo"scht wird.
\d
\time
\date
Ausgabe der aktuellen Tageszeit,
Ausgabe des Datums
\s
\sh
\shell [parm]
Ruf einer UNIX -Shell. Nach Beendigung der Shell kehrt
man automatisch in den Monitor zuru"ck. Wenn das Kom-
mando einen Parameter hat, wird die Shell nicht als
interaktive Shell gestartet, sondern das mit dem Para-
meter bezeichnete Programm (File) gerufen, dem als
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 20 - MMMMoooonnnniiiittttoooorrrr
Parameter die Stellungsparameter ($1 usw.) u"ber den
Monitor-Puffer zuga"nglich sind. Wenn der Makro
"{shell}" definiert ist, wird dessen Wert als Pfadname
eines Programms benutzt, das mit o.g. Parametern
gerufen wird, andernfalls wird ein
installationsabha"ngiger Kommandointerpreter gerufen.
Liegt bei Ru"ckkehr ein Code != 0 vor, ruft der Monitor
den Makro {exectrap} auf.
\q
\quit
Sitzungsende fu"r ING_DB .
\cd
\chdir [parm]
Vera"nderung des current directory, auf das durch den
Parameter bezeichnete directory.
\i
\include
\read parm
Das bezeichnete File wird zur Eingabe fu"r den Monitor.
<backslash> werden in diesem File so behandelt, wie die
vom Terminal gegebenen.
\w
\write parm
Der Inhalt des Monitor-Puffers wird auf das, durch den
Parameter bezeichnete File geschrieben.
\b
\branch parm
Verzweigung innerhalb eines \include File, siehe den
folgenden Abschnitt u"ber Spru"nge.
\k
\mark parm
Setzt eine Marke fu"r ein \branch.
(Parameter ist Labelname)
\h
\help [parm]
Ausgabe des Inhaltsverzeichnisses der Referenz-Hilfen;
mit anschliessendem Titel wird eine Kurzinformation zum
Kommando gegeben.
\<ein_anderes_Zeichen>
Das Zeichen <backslash> gelangt in den Monitor-Puffer,
irgendeine spezielle Bedeutung des <backslash> fu"r das
folgende Zeichen wird ignoriert - das erlaubt, das
Zeichen "\" auch als ein normales Zeichen einzugeben
(siehe auch QQQQUUUUEEEELLLL - Zeichenketten). Es ist wichtig, zu
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 21 - MMMMoooonnnniiiittttoooorrrr
vermerken, dass der Makro-Prozessor die <backslash>
wegblendet, die zum Kaschieren von Begrenzern
eingesetzt werden. Im allgemeinen formuliert man also
zwei <backslash> hintereinander, wenn man eines an den
Parser senden will (Das ist insgesamt aber so kom-
pliziert, dass man am besten die Verwendung von
<backslash> u"berhaupt vermeidet.).
_1._1._2._4. MMMMaaaakkkkrrrroooossss ********
Eine genaue Beschreibung der Makros findet man im Abschnitt
MMMMaaaakkkkrrrroooossss....
_1._1._2._5. SSSSpppprrrriiiinnnnggggeeeennnn ********
Die \branch- und \mark-Kommandos erlauben es, innerhalb
eines \include File zu springen (analog zu "goto <label>"
und "<label>:" in anderen Programmiersprachen). Einem
\mark-Kommando muss eine Marke folgen. Einem
\branch-Kommando folgt entweder eine Marke - was einen
unbedingten Sprung - oder nach einem "?" ein Ausdruck,
gefolgt von einer Marke - was einen bedingten Sprung
bewirkt. Der bedingte Sprung wird ausgefu"hrt, wenn der Aus-
druck gro"sser als Null ist. Zum Beispiel wu"rde
\branch ?{readcount} noinput
immer dann zur Marke noinput springen, wenn der Makro
{readcount} anzeigt, dass keine Zeichen eingegeben wurden.
Wenn bei Ausfu"hrung eines Sprungs die Zielmarke nicht gefun-
den wird, versucht der Monitor die Marke, die der Auflo"sung
des Makros {default} entspricht, zu finden. Wird keine
Zielmarke gefunden, wird das \include File verlassen.
Der Ausdruck, der im \branch-Kommando angegeben werden kann,
muss folgender Syntax genu"gen:
Die Operatoren +, -, *,
/, ", |, <=, >=, <, >, =, und != sind in ihrer
gewo"hnlichen Bedeutung definiert.
Der linke einstellige Operator "!" kann fu"r die logische
Negation benutzt werden. Die Operationen werden nach den
u"blichen Vorrangregeln behandelt, Abweichungen dazu ko"nnen
durch Klammerung mit () angewiesen werden. Der Ausdruck
darf keine Leerzeichen enthalten. Ein Leerzeichen wu"rde den
Ausdruck beenden.
_1._1._2._6. IIIInnnniiiittttiiiiaaaalllliiiissssiiiieeeerrrruuuunnnngggg ********
Wa"hrend des Startvorgangs (login) werden eine Reihe von
Initialisierungsaktionen ausgefu"hrt. Zuna"chst (1) wird ein
Makro "{pathname}" definiert, der den initialisierungsabha"n-
gigen ING_DB Pfadnamen entha"lt. Weiter (2) wird das Ini-
tialisierungs-File "{pathname}/sys/etc/startup" abgear-
beitet. Dieses File ist vorgesehen, systemabha"ngige Parame-
ter, wie den verwendeten Editor oder die verwendete Shell zu
definieren. Drittens (3) wird ein nutzerabha"ngiges
Initialisierungs-File, wie es in einem Feld des ING_DB
-Nutzerverzeichnis fu"r den Nutzer spezifiziert ist, gelesen
und ausgefu"hrt. Normalerweise dient dazu ein File namens
".quel" im home_directory des Nutzers. Dieses
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 22 - MMMMoooonnnniiiittttoooorrrr
Initialisierungs-File kann dazu dienen, dem Nutzer gewisse
Makros zu definieren oder die gebra"uchlichen
range-Statements abzusenden. Man kann in diesem File z.B.
auch schon das Start-Menue eines voll eingerichteten Anwen-
dungsfalles unterbringen. Letztlich (4) wird die Steuerung
dem Nutzer-Terminal u"bergeben.
_1._1._2._7. FFFFllllaaaaggggssss ****
Folgende Flags, wie sie bei Ruf von ING_DB (quel(unix))
gegeben werden ko"nnen, betreffen den Monitor:
Die -aaaa -Option unterdru"ckt die autoclear-Funktion. Das
bedeutet, dass der Monitor-Puffer nicht automatisch
gelo"scht wird. Die Wirkung ist so, als wu"rde nach
jedem \go-Kommando ein \append-Kommando eingefu"gt wer-
den. Unter dieser Option muss der Nutzer also selbst
jeweils durch ein explizites \reset-Kommando den
Monitor-Puffer lo"schen.
Die -dddd -Option unterdru"ckt die Ausgabe des dayfile.
Die -ssss -Option unterdru"ckt mit Ausnahme der Fehler-
nachrichten die Ausgabe aller Meldungen des Monitor,
also die login- und logout-Nachrichten, die Ausgabe des
dayfile und der Prompt-Meldungen. Diese Option kann
fu"r "verdeckte Anfragen" eingesetzt werden; bei der
Arbeit aus \include Files wird diese Option tempora"r
automatisch gesetzt.
SSSSIIIIEEEEHHHHEEEE AAAAUUUUCCCCHHHH
quel(unix), makros
NNNNAAAACCCCHHHHRRRRIIIICCCCHHHHTTTTEEEENNNN
ING_db> Sie ko"nnen eine neue Query beginnen.
ING_db: Die vorangehende Query wurde bearbeitet. Sie
sind wieder im Monitor
I N G _ d b . . . Die Query wird durch ING_DB bear-
beitet.
>>cmd Sie arbeiten unter einem UNIX -Text-Editor.
>>sh Sie arbeiten unter einer UNIX -shell.
Alle anderen Nachrichten sind selbsterkla"rend.
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 23 - MMMMaaaakkkkrrrroooossss
_1._1._3. KKKKuuuurrrrzzzzbbbbeeeesssscccchhhhrrrreeeeiiiibbbbuuuunnnngggg ddddeeeessss MMMMaaaakkkkrrrroooo----PPPPrrrroooozzzzeeeessssssssoooorrrrssss ********
_1._1._3._1. IIIInnnnhhhhaaaalllltttt uuuunnnndddd LLLLeeeeiiiissssttttuuuunnnngggg ****
Der Makro-Prozessor als Bestandteil des interaktiven
Terminal-Monitors erlaubt es, die QUEL nach Anwenderwu"nschen
zuzuschneiden. Ein gegebener Text kann durch ihn in QUEL-
Statements eingefu"gt oder u"bersetzt werden, bevor er zur
ING_DB -Verarbeitung gelangt.
_1._1._3._2. AAAArrrrbbbbeeeeiiiittttsssswwwweeeeiiiisssseeee ddddeeeessss MMMMaaaakkkkrrrroooo----PPPPrrrroooozzzzeeeessssssssoooorrrrssss ********
Der Makro-Prozessor transformiert einen Input-Text in einen
Output-Text und fu"hrt dabei ggf. Funktions-Makros aus. Bei
den Monitor-Kommandos \go, \list und \eval ist der
Monitor-Puffer der Input-Text, der Output-Text wird dem
ING_DB -Parser zur Ausfu"hrung der QUEL-Statements
u"bergeben(\go), auf dem Terminal ausgegeben (\list) oder
nicht weiter behandelt (\eval, das Kommando dient
ausschliesslich der Abarbeitung von Funktions-Makros). Bei
jedem Monitor-Kommando mit Parameter, wird dieser erst durch
den Makro-Prozessor transformiert, ehe er im Monitor-
Kommando als Parameter benutzt wird; das Label eines
\mark-Kommandos wird vom Makro-Prozessor nicht bearbeitet.
Der Output-Text, den der Makro-Prozessor erzeugt, entha"lt
die Textbestandteile des Input-Textes, auf die sich kein
Makro anwenden liess und solche substituierten Texte, auf
die kein Makro mehr anwendbar ist.
_1._1._3._3. BBBBeeeessssttttaaaannnnddddtttteeeeiiiilllleeee eeeeiiiinnnneeeessss MMMMaaaakkkkrrrroooo ********
Der Makro-Prozessor arbeitet Makros ab, wenn im Input-Text
entsprechende Textabschnitte enthalten sind. Makros sind in
einer Makro-Tabelle abgelegt, die global fu"r die ING_DB
-Sitzung des Nutzers definiert ist. Die Makro-Tabelle ist
mit den Funktions-Makros initialisiert. Wa"hrend einer
ING_DB -Sitzung ko"nnen weitere Makros, die
Substitutions-Makros, durch Definition
(define-Funktions-Makro) eingebracht, gestrichen
(remove-Funktions-Makro) und angelistet (dump-Funktions-
Makro) werden.
Jeder Makro hat ein tttteeeemmmmppppllllaaaatttteeee und einen WWWWeeeerrrrtttt.... Das template
ist eine Vorschrift, die entscheidet, ob der Makro auf einen
Abschnitt des Input-Textes zutrifft. Das template entha"lt
Schlu"sselwo"rter, die im Input-Text vorhanden sein mu"ssen, um
den Makro anwenden zu ko"nnen und Parameterdefinitionen, die
Wo"rterfolgen hinter oder zwischen den Schlu"sselwo"rtern
beschreiben. Das template entha"lt weiter Begrenzersymbole
zwischen den Schlu"sselwo"rtern und Parameterdefinitionen.
Das template bestimmt den Abschnitt des Input-Textes, den
der Makro diesem entnimmt.
Der Wert eines Makros ist der Text, den der Makro-Prozessor
in den Output-Text anstelle des entnommenen Textes einsetzt.
Er wird bei Funktions-Makros aus der durch sie ausgefu"hrten
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 24 - MMMMaaaakkkkrrrroooossss
Funktion bestimmt und ist bei den meisten Funktions-Makros
eine leere Zeichenfolge. Bei Substitutions-Makros wird der
Wert aus festen Wo"rtern und den entnommenen Parameterwerten
gebildet. Die Vorschrift dafu"r ist das rrrreeeeppppllllaaaacccceeeemmmmeeeennnntttt eines
Substitutions-Makros, das Wo"rter, Parameterreferenzen und
Begrenzer entha"lt.
_1._1._3._4. TTTTeeeexxxxttttsssskkkkaaaannnnddddiiiieeeerrrruuuunnnngggg ********
Der Makro-Prozessor ist ein Wort-Prozessor, d.h. er arbeitet
auf ganzen Wo"rtern des Input-Textes und nicht auf beliebigen
seiner Abschnitte. Ein WWWWoooorrrrtttt ist ein BBBBeeeezzzzeeeeiiiicccchhhhnnnneeeerrrr,,,, eine ZZZZaaaahhhhllll
oder ein OOOOppppeeeerrrraaaattttoooorrrr.... Ein BBBBeeeezzzzeeeeiiiicccchhhhnnnneeeerrrr beginnt mit einem
Buchstaben, dem Buchstaben oder Ziffern folgen, "_" gilt als
Buchstabe; der Makro-Prozessor unterscheidet Klein- und
Grossbuchstaben. Eine ZZZZaaaahhhhllll ist eine Ziffernfolge, ggf. mit
einem Dezimalpunkt ".". Ein OOOOppppeeeerrrraaaattttoooorrrr ist jedes andere
einzelne Zeichen, das ausserdem nicht Standardbegrenzer ist;
die kombinierten Operatoren <=, >=, !=, **, /*, */ sind ein
Wort.
Der Makro-Prozessor kennt die SSSSttttaaaannnnddddaaaarrrrddddbbbbeeeeggggrrrreeeennnnzzzzeeeerrrr <blank>,
<tab> und <nl>, die keine Operatoren sind. Als
<<<<wwwwoooorrrrdddd____cccchhhhaaaannnnggggeeee>>>> wird die Position im Text bezeichnet, an der
das vorangehende Wort endet.
Im template von Makros werden folgende BBBBeeeeggggrrrreeeennnnzzzzeeeerrrrssssyyyymmmmbbbboooolllleeee
eingesetzt:
\^ genau ein <blank> oder <tab> oder <nl>
zu Beginn des template: Makro wird nur zu Zeilenanfang
des Textes angewandt !
\=> genau ein <word_change>
\| <word_change> oder beliebig viele der o.g. Standard-
begrenzer
\<blank><blank>genau <blank>
\<tab>genau <tab>
\<nl>genau <nl>
Diese Begrenzersymbole werden in den Funktions-Makros
verwendet (s. folgende U"bersicht).
_1._1._3._5. PPPPaaaarrrraaaammmmeeeetttteeeerrrr iiiinnnn MMMMaaaakkkkrrrroooossss ********
Eine PPPPaaaarrrraaaammmmeeeetttteeeerrrrddddeeeeffffiiiinnnniiiittttiiiioooonnnn in einem template wird durch drei
Zeichen gegeben:
$ <p_name> <p_delim>
$ kennzeichnet, dass eine Parameterdefinition folgt.
<p_name> ist ein makro-lokaler Bezeichner (ein graphisches
Zeichen), der im replacement referenziert werden kann.
<p_delim> ist das Zeichen, mit dem der Parameter zu begren-
zen ist. Der Begrenzer darf als
<backslash><token>
geschrieben werden, wenn ein <token> Begrenzer werden soll,
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 25 - MMMMaaaakkkkrrrroooossss
der eine Spezialbedeutung hat (z.B. <nl>). Im Input-Text
darf innerhalb eines Parameterwertes das ihn sonst begren-
zende Zeichen durch ein vorangestelltes <backslash>
kaschiert werden, der Parameterwert wird bis zum ersten
freistehenden Begrenzer gewertet.
Durch eine Parameterdefinition
$$ <p_name> <p_delim>
wird der Parameter als zur Vorverarbeitung geeignet (pre-
scaneable) gekennzeichnet, s. unten prescan.
_1._1._3._6. SSSSppppeeeezzzziiiieeeelllllllleeee MMMMaaaakkkkrrrroooossss ********
Der Monitor bringt die Substitutions-Makros
{{{{ppppaaaatttthhhhnnnnaaaammmmeeee}}}}
Pfadname des ING_DB _file-Systems
{{{{uuuusssseeeerrrrccccooooddddeeee}}}}
2-Byte-ING_DB -Usercode des arbeitenden Nutzers
{{{{ddddaaaattttaaaabbbbaaaasssseeee}}}}
Name der bearbeiteten Datenbank
{{{{rrrreeeeaaaaddddccccoooouuuunnnntttt}}}}
Anzahl der durch den letzten read- oder readdefine-
Makro gelesenen Zeichen (0, falls nur <nl>, -1, falls
EOF eingegeben wurde)
{{{{ttttuuuupppplllleeeeccccoooouuuunnnntttt}}}}
Anzahl der vom letzten retrieve-, append-, replace-
oder delete-Statement erfolgreich behandelten Tupel,
sonst -1
ein.
Eine besondere Bedeutung haben folgende Substitutions-Makros
fu"r die Ausfu"hrung von Monitor-Kommandos:
{{{{eeeeddddiiiittttoooorrrr}}}}
Name eines speziellen Editors fu"r das \edit-Kommando
{{{{sssshhhheeeellllllll}}}}
Name eines speziellen Programms, das durch ein \shell-
Kommando gerufen werden soll
{{{{ddddeeeeffffaaaauuuulllltttt}}}}
Sprungmarke fu"r ein \branch-Kommando, dessen Zielmarke
nicht gefunden wird
{{{{bbbbeeeeggggiiiinnnnttttrrrraaaapppp}}}}
{{{{eeeennnnddddttttrrrraaaapppp}}}}
werden bei einem \go-Kommando gerufen, ihr substi-
tuierter Text wird vor und hinter den Text des
Monitor-Puffers gestellt, wenn dieser zur Verarbeitung
weitergegeben wird
{{{{qqqquuuueeeerrrryyyyttttrrrraaaapppp}}}}
definiert den Namen eines Protokollfiles; ist querytrap
definiert, werden auf dem File alle Nutzeraktionen
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 26 - MMMMaaaakkkkrrrroooossss
protokolliert; wird das Makro gelo"scht, wird das Pro-
tokollfile geschlossen.
{{{{ccccoooonnnnttttiiiinnnnuuuueeeettttrrrraaaapppp}}}}
wird vor Beginn des weiteren Dialogs nach Ausfu"hrung
eines \go-Kommandos gerufen
{{{{eeeexxxxeeeeccccttttrrrraaaapppp}}}}
wird nach Ausfu"hrung eines \edit oder \shell-Kommandos
gerufen, wenn das bearbeitete Programm einen
Ru"ckkehrcode != 0 lieferte
Die letztgenannten Makros mu"ssen vor ihrer Verwendung im
Startvorgang des Monitor im startupfile oder im initfile
oder direkt wa"hrend der Sitzung vom Nutzer definiert werden.
_1._1._3._7. FFFFuuuunnnnkkkkttttiiiioooonnnnssss----MMMMaaaakkkkrrrroooossss ********
template Wert Funktion
------------------------------------------------------------
{rawdefine;\|$$T;\|$$R} "" ) SM t:T, r:R
{define;\|$$T;\|$$R} "" ) SM t:T, r:R
{remove} "" ) streicht alle SM
{remove;\|$$T} "" ) dto falls t=T
{dump} "" ) gibt alle SM aus
{dump;\|$$N} "" ) dto falls name=N
------------------------------------------------------------
{type;\|$$M} "" ) gibt M aus
{read;\|$$M} Eingabetext gibt M aus
SM t:{readcount}
r:Textla"nge
{readdefine;\|$$N;\|$$M} {readcount} gibt M aus
SM t:{readcount}
r:Textla"nge
SM t:N
r:Eingabetext
------------------------------------------------------------
{expr;\|$$e} Wert von e Berechnung von e
{exprdefine;\|$$n;\|$$e} "" ) SM t:n
r:Wert von e
------------------------------------------------------------
{same;\|$$a;\|$$b} Vergleich von a, b
+1, 0, -1 Wert bei =, >, <
{if;\|$$e;\|$t;\|$f} t oder f Berechnung von e
t wenn >0 sonst f
------------------------------------------------------------
{substr;\|$$f;\|$$t;$$s} substr substring von s
zwischen f bis t
------------------------------------------------------------
{dnl} "" bis <nl> verwerfen
------------------------------------------------------------
) ggf. hinter dem template weiter auf der gleichen Zeile
stehender Input-Text wird verworfen.
SM definiert einen Substitutions-Makro mit
t:template und r:replacement
$$P Parameter ist prescaneable
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 27 - MMMMaaaakkkkrrrroooossss
Die type-, read- und readdefine-Makros arbeiten auf
standard_input und _output, auch wenn man sie in einer
\include-Programmebene benutzt. Der Name eines Makros ist
die Folge der in seinem template vor der ersten Parameterde-
finition stehenden Schlu"sselwo"rter. Die remove- und dump-
Makros betreffen alle die Substitutions-Makros, deren Name
mit der im Makro-Parameter angegebenen Wo"rterfolge beginnt.
Die Funktions-Makros bleiben von den remove- und dump-Makros
unberu"hrt. Man setzt den remove-Makro ein, um die Arbeit
des Makro-Prozessors zu beschleunigen. Die Definition eines
Substitutions-Makros eines Namens, der in der Makro-Tabelle
schon existiert, u"berschreibt diesen. Die geschweiften
Klammern { und } erlauben es, Funktions-Makros zu
schachteln, die Klammern kaschieren den aktuellen Parameter-
begrenzer.
_1._1._3._8. BBBBeeeerrrreeeecccchhhhnnnnuuuunnnngggg aaaarrrriiiitttthhhhmmmmeeeettttiiiisssscccchhhheeeerrrr AAAAuuuussssddddrrrruuuu""""cccckkkkeeee ********
Die e-Parameter der if-, expr- und exprdefine-Makros und die
f- und t-Parameter des substr-Makros du"rfen arithmetische
Ausdru"cke sein.
Ein Ausdruck darf Operatoren und Operanden enthalten.
Operatoren sind:
** (Potenzieren)
- ! (Vorzeichen, logische Negation)
* / % (Multiplikation, Division, Divisionsrest)
+ - (als zweistellige Operationen)
> >= < <= (Vergleichsoperatoren)
= != (Gleichheit, Ungleichheit)
& (logisches UND)
| (logisches inclusives ODER)
Operationen auf gleicher Zeile sind von gleicher
Bindungssta"rke, sonst gilt absteigende Bindung entsprechend
der Aufza"hlung ( ) zur Festlegung der Bindung von Opera-
tionen.
Der Ausdruck darf als Operanden nur noch ganzzahlig nume-
rische Werte mit einem Wertebereich zwischen -32768 bis
32767 enthalten, sonst erfolgt nach entsprechenden Meldungen
ein Abbruch der weiteren Ausdrucksberechnung. Die
Ausdrucksauswertung wird durch die Zeichen <blank>, <tab>,
<nl> oder <eof> beendet.
Die arithmetischen Operationen werden in u"blicher Ganz-
zahlarithmetik (/: ganzer Teil der Division, %:
Divisionsrest; Division durch 0 ergibt nach Warnung den Wert
0) berechnet. Die logischen Operationen ( ! & | ) deuten bei
ihren Operanden <=0 als FALSE und >0 als TRUE. Die
logischen Operationen und die Vergleichsoperationen liefern
den arithmetischen Wert 0 fu"r FALSE und 1 fu"r TRUE. Die
Ausdrucksberechnung erfolgt von links nach rechts,
entsprechend den Bindungsregeln, geklammerte Teile werden
ge- und entkellert.
Bei der Ausdrucksauswertung (nach Makro-Auflo"sung) weisen
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 28 - MMMMaaaakkkkrrrroooossss
Meldungen auf syntaktische Fehler im Ausdruck hin.
_1._1._3._9. PPPPaaaarrrraaaammmmeeeetttteeeerrrrvvvvoooorrrrvvvveeeerrrraaaarrrrbbbbeeeeiiiittttuuuunnnngggg ((((pppprrrreeeessssccccaaaannnn)))) ********
Der Makro-Prozessor entnimmt nach der Vorschrift des tem-
plate dem Input-Text die Parameterwerte. In manchen Fa"llen
ist es no"tig, dass vor deren Verarbeitung diese einer geson-
derten Makro-Bearbeitung unterzogen, also vorverarbeitet
werden, ehe sie als Parameterwert eingesetzt werden. Das
wird als pppprrrreeeessssccccaaaannnn bezeichnet. Im template des Makros muss
die Parameterdefinition dazu mit "$$" gekennzeichnet und im
Input-Text der Parameterwert dazu durch "@" eingeleitet
sein.
_1._1._3._1_0. DDDDeeeeffffiiiinnnniiiittttiiiioooonnnn vvvvoooonnnn SSSSuuuubbbbssssttttiiiittttuuuuttttiiiioooonnnnssss----MMMMaaaakkkkrrrroooossss ********
Einen Substitutions-Makro definiert man mit einem define-
oder rawdefine-Funktions-Makro. Die Verwendung des define-
Funktions-Makros ist fu"r ga"ngige Anwendungen ausreichend.
Man verwendet im template zwischen Schlu"sselwo"rtern und
Parameterdefinitionen <blank> als Begrenzer, der
Makro-Prozessor setzt wa"hrend der U"bernahme von template und
replacement in die Makro-Tabelle an alle Stellen des tem-
plate, wo Standardbegrenzer oder <word_change> sind, das
Begrenzersymbol "\|" ein und beendet das template mit "\=>"
oder "\|". Dadurch wird erreicht, dass der Makro auch
angewandt wird, wenn ein Nutzer seinen Text mit beliebigen
Absta"nden zwischen Wo"rtern ausschmu"ckt.
Die Definition mittels rawdefine dient der genauen
Festlegung von Begrenzern, der Makro-Prozessor la"sst die vom
Definierenden eingebrachten Begrenzersymbole so stehen und
vera"ndert nur die, wo Standardbegrenzer oder <word_change>,
wie bei define belassen wurden.
Bei der Definition eines Substitutions-Makros gibt man als
replacement die Wo"rterfolge an, die in den Output-Text
eingesetzt werden soll, durchsetzt mit den gewu"nschten
Begrenzern und auch Parameterwerten, die das template aus
dem Input-Text ermittelt hat. Eine Parameterreferenz im
replacement schreibt man als
$ <p_name>
Natu"rlich muss <p_name> im template definiert sein, im
replacement kann er mehrfach verwendet werden. Im replace-
ment ko"nnen alle, den Makro-Prozessor sonst steuernden
Zeichen, verwendet werden. Das Zeichen "$" muss als "\$"
kaschiert werden, wenn es bei U"bernahme des template in die
Makro-Tabelle nicht die Funktion der Einleitung einer
Parameterreferenz ausu"ben soll. Entha"lt das replacement
Wo"rterfolgen, auf die sich weitere Makros anwenden lassen,
erfolgt das folgend auch.
_1._1._3._1_1. KKKKaaaasssscccchhhhiiiieeeerrrreeeennnn ((((qqqquuuuoooottttiiiinnnngggg ooooddddeeeerrrr ccccoooonnnncccceeeeaaaalllliiiinnnngggg)))) ********
Durch Anwendung der KKKKaaaasssscccchhhhiiiieeeerrrruuuunnnnggggssssppppaaaaaaaarrrreeee ` und ' kann man dem
Makro-Prozessor signalisieren, dass der, durch sie quasi
eingeklammerte Abschnitt des Input-Textes, nicht der Makro-
Bearbeitung unterzogen werden soll (quoting oder conceal-
ing). Die Kaschierungspaare du"rfen geschachtelt werden.
Sie du"rfen auch im template verwendet werden. Im
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 29 - MMMMaaaakkkkrrrroooossss
Output-Text sind die a"usseren Kaschierungspaare nach eeeeiiiinnnneeeemmmm
Makro-Lauf weggelassen.
Die Kaschierungspaare kann man als Klammern fu"r solche
Parameterwerte im Input-Text verwenden, die aus mehreren
Wo"rtern bestehen, wenn sonst das template nur ein Wort als
Parameterwert entnehmen wu"rde.
Mit <backslash> kann man das einzelne, ihm folgende Zeichen
kaschieren, wenn es ausserhalb einer bereits kaschierten
Zeichenfolge steht und ihm folgt:
- der aktuelle Parameterbegrenzer
- eines der Zeichen
<blank> <tab> \t <nl> \n
` ' { } @ \
<backslash> kaschiert also die Standardbegrenzer und die
sonst den Makro-Prozessor steuernden Zeichen. Der
Makro-Prozessor gibt fu"r "\t" oder "\n" <tab> oder <nl> in
den Output-Text, auch sonst gelangt das <backslash> genau
dann nicht in den Output-Text, wenn es nach obigen Regeln
als Kaschierungssymbol gewertet wird. Ein Funktions-Makro
wird vom Makro-Prozessor immer ganz auf einer Zeile erwar-
tet; gelingt diese Formulierung aus Platzgru"nden nicht, muss
"\<nl>" an entsprechenden Stellen verwendet werden.
NNNNAAAACCCCHHHHRRRRIIIICCCCHHHHTTTTEEEENNNN
infinite loop in makro
Ein Abschnitt des Input-Text wurde 100 mal einer
Makro-Substitution unterzogen. Das hat seine Ursache
i.d.R. darin, dass Substitutions-Zyklen definiert sind,
z.B. {define;alpha;alpha} oder {define;alpha;beta}
{define;beta;alpha}. Der Makro-Prozessor geht weiter
im Input-Text.
every parameter needs a delimiter
Die Parameterdefinition hat keinen Begrenzer
null parameter name
Die Parameterdefinition hat keine Namensangabe
parameter <p_name> redeclared
Der gleiche <p_name> wird in einem template mehrfach
als solcher verwendet
parameter <p_name> referenced but not defined
Der im replacement referenzierte <p_name> wurde im tem-
plate nicht definiert
BBBBEEEEIIIISSSSPPPPIIIIEEEELLLLEEEE
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL
Referenz_Manual - 30 - MMMMaaaakkkkrrrroooossss
/* Erzeuge das QUEL-Schlu"sselwort "retrieve"
aus dem ku"rzeren Wort "get" */
{define; get; retrieve} \eval
/* Erzeuge ein komplettes retrieve-Statement
fu"r einen Spezialfall aus einer
kurzen Angabe "get Parameterwert" */
{define; get $1; retrieve(p.all)where name="$1"}\eval
/* In einem Menue seien dem Nutzer die
Antworten a,b,? gestattet,
er wird durch Ausgabe der Meldung "a,b,?"
zur Abgabe einer Antwort aufgefordert,
in deren Folge entsprechende Marken
angesprungen werden */
{define; {default}; ab}\eval
\branch {read;a,b,}
\mark a
:
:
\mark b
:
:
\mark ab
:
:
Zur Sicherheit gegen eine Eingabe irgendwelcher Zeichen
durch den Anwender, deren Deutung als Sprungmarke auf kein
vorhandenes \mark fu"hren wu"rde, wird einleitend der
{default}-Makro so definiert, dass auch alle derartigen
Eingaben auf \mark ab gelenkt werden.
/* Der Nutzer wird durch Ausgabe
eines Textes "NAME:" aufgefordert,
einen name einzugeben,
gibt er nur <nl>, also 0 Zeichen ein,
wird eine Marke Ende angesprungen */
{readdefine; name; NAME:}\eval
\branch ?{readcount}=0 Ende
retrieve (p.all)where p.`name'="name"\go
Der eingegebene Text wird in das Statement zwischen die " "
eingesetzt, das erfolgt nur dort, weil `name' von der Sub-
stitution ausgeschlossen wird.
ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL