############################################################## ############################################################## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ### # # ##### ###### ###### ## ## # ## # # # # # # # ## ## # # # # # # # # # ## ## # # # # # #### # # ###### ## ## # # # # # # # # # # ## ## # # ## # # # # # # ## ## ### # # ##### ####### ###### ###### ## ## ## ## ## ## ## ## ## ## ## ## ##### ##### # ##### ## ## # # # # # # # ## ## # # # # ## ## ###### ##### # ##### ## ## # # ### # # # ## ## # # ### # # # # # ## ## ##### ### ##### # ##### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ############################################################## ############################################################## 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: <<<>>> Name der aufliegenden Datenbank <<<>>> Name einer Relation, Tabelle <<<>>> 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 ("_", ) 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 ( "\" ) vorangestellt werden. Das muss auch fu"r 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 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: {} [.] [eE [+-] {}] Im obigen speziellen Fall steht 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. <<<>>> <<<>>> Sie liefern in der Ersetzung den String fu"r den bzw. den . _1._1._1._6. AAAAttttttttrrrriiiibbbbuuuutttteeee <<<>>> **** Ein Attribut ist ein Konstrukt der Form: . <<<>>> identifiziert eine bestimmte Relation. Man kann den Bezeichner <<<>>> auffassen, als stu"nde er fu"r die Zeilen bzw. Tupel dieser Relation. Eine Variable wird einer Relation durch Verwendung des rrrraaaannnnggggeeee---- Statements zugeordnet. <<<>>> 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: 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 <<<>>> **** 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 <<<>>> bezeichnet. _1._1._1._9. FFFFoooorrrrmmmmaaaatttteeee <<<>>> **** Jeder <<<>>> hat ein 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() Resultat hat Format i1 int2() Resultat hat Format i2 int4() Resultat hat Format i4 float4() Resultat hat Format f4 float8() Resultat hat Format f8 Die Konvertierungsoperatoren konvertieren ihr Argument also in das von ihnen bezeichnete Format. <<<>>> 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 <<<>>> nicht eingehalten wurde. U"berlauf wird bei Konvertierungen nicht gepru"ft. _1._1._1._1_1. ZZZZiiiieeeelllllllliiiisssstttteeee <<<>>> **** Eine <<<>>> 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) iiiissss 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 kein einfaches Attribut ist, muss diese Form benutzt werden, um den Ausdruck einem namentlich angegebenem Resultat zuzuordnen. b) Im Falle eines rrrreeeettttrrrriiiieeeevvvveeee----Statements wird als Ergeb- nisspalte die angenommen, die den gleichen Namen, wie der dabei angegebene 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 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 : gehalt > 1000 erfu"llen. aaaallllllll kann in der 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 <<<>>> uuuunnnndddd KKKKllllaaaauuuusssseeeellllnnnn <<<>>> **** Es gibt Vergleichsoperatoren , die beliebige Ausdru"cke 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 innerhalb der Zeichenketten ignoriert. Eine Klausel ist ein Paar von Ausdru"cken, die durch einen Vergleichsoperator verknu"pft sind: _1._1._1._1_3. LLLLooooggggiiiisssscccchhhheeee OOOOppppeeeerrrraaaattttoooorrrreeeennnn <<<>>> uuuunnnndddd QQQQuuuuaaaalllliiiiffffiiiikkkkaaaattttiiiioooonnnn <<<>>> ((((aaaauuuucccchhhh <<<>>>)))) **** Logische Operatoren haben Klauseln () 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 <<<>>> besteht aus einer Anzahl von Klauseln , die durch logische Operatoren verknu"pft sind. Eine kann damit sein: <<<>>> nnnnooootttt <<<>>> <<<>>> oooorrrr <<<>>> <<<>>> aaaannnndddd <<<>>> ( <<<>>> ) ING_DB 6.3/3 Juni 16, 1989 QQQQUUUUEEEELLLL Referenz_Manual - 13 - EEEEiiiinnnnffffuuuueeeehhhhrrrruuuunnnngggg _1._1._1._1_4. FFFFuuuunnnnkkkkttttiiiioooonnnnaaaalllleeee AAAAuuuussssddddrrrruuuu""""cccckkkkeeee <<<>>> **** Ein <<<>>> 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 <<<>>> **** 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 <<<>>> **** <<<>>> (<<<>>> [ wwwwhhhheeeerrrreeee <<<>>> ] ) Ein einfaches Aggregat erzeugt einen einzelnen skalaren Wert. <<<>>> wird u"ber der Menge der Tupel aggregiert, die die <<<>>> erfu"llen (oder u"ber alle Tupel im Geltungsbereich des Ausdrucks, wenn keine angegeben ist). Die Operatoren ssssuuuummmm und aaaavvvvgggg verlangen <<<>>> in numerischem Format; ccccoooouuuunnnntttt,,,, aaaannnnyyyy,,,, mmmmaaaaxxxx und mmmmiiiinnnn arbeiten sowohl auf Zeichenketten, als auch auf <<<>>> 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 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 **** <<<>>> (<<<>>> bbbbyyyy <<<>>> {{{{,,,, <<<>>>}}}} [ wwwwhhhheeeerrrreeee <<<>>> ] ) Aggregat-Funktionen sind Verallgemeinerungen der einfachen Aggregate. Die bbbbyyyy---- Phrase gruppiert (d.h. portioniert) die Menge der sich qualifizierenden Tupel nach den Werten der <<<>>> (das ist ein ). Bei Angabe von mehr als einem <<<>>>,,,, sind die durch bbbbyyyy gruppierten Werte die Verkettung der einzelnen <<<>>>.... <<<>>> 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 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 ( "\" ) voran- stellt. So bezeichnet "\*" das Zeichen "*". Pattern- matching-Zeichen in einer 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 ("\"). 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. 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. \ Das Zeichen gelangt in den Monitor-Puffer, irgendeine spezielle Bedeutung des 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 wegblendet, die zum Kaschieren von Begrenzern eingesetzt werden. Im allgemeinen formuliert man also zwei hintereinander, wenn man eines an den Parser senden will (Das ist insgesamt aber so kom- pliziert, dass man am besten die Verwendung von 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