2161 lines
94 KiB
Plaintext
2161 lines
94 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
##############################################################
|
||
##############################################################
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ### # # ##### ###### ###### ##
|
||
## # ## # # # # # # # ##
|
||
## # # # # # # # # # ##
|
||
## # # # # # #### # # ###### ##
|
||
## # # # # # # # # # # ##
|
||
## # # ## # # # # # # ##
|
||
## ### # # ##### ####### ###### ###### ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##### ##### # ##### ##
|
||
## # # # # # # # ##
|
||
## # # # # ##
|
||
## ###### ##### # ##### ##
|
||
## # # ### # # # ##
|
||
## # # ### # # # # # ##
|
||
## ##### ### ##### # ##### ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
## ##
|
||
##############################################################
|
||
##############################################################
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
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
|
||
|
||
|