


        Referenz_Manual            - 61 -                       SSSSAAAAVVVVEEEE


        NNNNAAAAMMMMEEEE

             save - Reservierung einer Relation bis zu einem Datum

        SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS

             ssssaaaavvvveeee relname uuuunnnnttttiiiillll month day year

        BBBBEEEESSSSCCCCHHHHRRRREEEEIIIIBBBBUUUUNNNNGGGG

             ssssaaaavvvveeee wird benutzt, um das Verfallsdatum einer  Relation
             zu  vera"ndern,  das  bei ihrer Erzeugung standardma"ssig
             auf 7 Tage festgelegt wird.

             <<<<mmmmoooonnnntttthhhh>>>> ist der Monat (1,2,..12),  <<<<ddddaaaayyyy>>>>  ist  der  Tag
             (1,2,..31)  und <<<<yyyyeeeeaaaarrrr>>>> ist das Jahr (1985,1986,...) des
             neuen Verfallsdatums.  Die Verfallsstunde  wird  auf  0
             Uhr gesetzt.

             Das Streichen einer Relation,  deren  Reservierungszeit
             abgelaufen  ist,  erfolgt  mit  dem  Programm ppppuuuurrrrggggeeee (s.
             ppppuuuurrrrggggeeee (unix)).  Es erfolgt also nicht automatisch, son-
             dern  nach  entsprechenden  technologischen  Regelungen
             u"ber die Arbeit mit ppppuuuurrrrggggeeee....

             Ausschliesslich  der  Eigentu"mer  einer  Relation  kann
             deren Verfallsdatum vera"ndern.

             Die  Systemrelationen  (relation,  attribute,   indexes
             usw.) haben kein Verfallsdatum.

        BBBBEEEEIIIISSSSPPPPIIIIEEEELLLL


             /* Reserviere die personal Relation
                bis Ende Februar 1987 */
             save personal until 3 1 1987


        SSSSIIIIEEEEHHHHEEEE AAAAUUUUCCCCHHHH

             create(quel), retrieve(quel), purge(unix), saver(unix)





















        ING_DB 6.3/3           Juni 16, 1989                    QQQQUUUUEEEELLLL





        Referenz_Manual            - 62 -                       VVVVIIIIEEEEWWWW


        NNNNAAAAMMMMEEEE

             view - definiere eine virtuelle Relation

        SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS

             ddddeeeeffffiiiinnnneeee vvvviiiieeeewwww relname (target-list) [ wwwwhhhheeeerrrreeee qual ]

        BBBBEEEESSSSCCCCHHHHRRRREEEEIIIIBBBBUUUUNNNNGGGG

             Eine virtuelle Relation oder Sicht hat im Gegensatz  zu
             einer  normalen Relation (create(quel)) keine physische
             Repra"sentation, das heisst, keine  eigenen  Daten.  Die
             Sicht  ero"ffnet  anwenderbezogen  neue Interpretationen
             existierender Datenbesta"nde ( Basisrelationen ).

             Die Syntax des vvvviiiieeeewwww  -Statements  ist  der  Syntax  des
             rrrreeeettttrrrriiiieeeevvvveeee  iiiinnnnttttoooo -Statements angelehnt.  Im Gegensatz zum
             rrrreeeettttrrrriiiieeeevvvveeee iiiinnnnttttoooo  Statement  werden  keine  Daten  recher-
             chiert, sondern nur die Recherchen-Definition u"bersetzt
             gespeichert.  Wenn die Relation rrrreeeellllnnnnaaaammmmeeee spa"ter  genutzt
             wird,  wird  die  Anfrage  um  die Definition der Sicht
             erweitert.

             Alle Formen eines  retrieve's  auf  eine  Sicht  werden
             unterstu"tzt,   aber   nur  eine  begrenzte  Anzahl  von
             A"nderungen.

             1.   A"nderungen  werden  nicht  unterstu"tzt,  wenn  die
                  Sicht mehrere Relationen umspannt.

             2.   Es werden keine A"nderungen  unterstu"tzt,  die  auf
                  Doma"nen  ausgefu"hrt  werden  sollen, die a) in der
                  Qualifikation des ddddeeeeffffiiiinnnneeee----vvvviiiieeeewwww -Statements  enthal-
                  ten   sind  oder  b)  nicht  in  einfache  Doma"nen
                  u"berfu"hrt werden ko"nnen.

             3.   Allgemein  werden  A"nderungen  unterstu"tzt,   wenn
                  garantiert werden kann (ohne Nutzung der aktuellen
                  Daten), dass das Ergebnis der A"nderungen der Sicht
                  identisch zu A"nderungen der Basisrelation ist.

             Die Basisrelationen mu"ssen nicht  notwendigerweise  vom
             Eigentu"mer der Sicht angeeignet sein. Nutzer, die nicht
             der DBA sind, erhalten die Mo"glichkeit,  DBA-Relationen
             in  ihre  Sichten  einzuschliessen.   Vom  System  wird
             garantiert, dass Basisrelationen nicht gelo"scht werden.

             zu_2a

                  range of b is base
                  define view v ( b.all ) where b.dom = 4
                  append to v ( dom = 5 )

                  Das fu"hrt dazu, dass das Tupel in  die  Basisrela-
                  tion  eingefu"gt wird, ohne dass es Bestandteil der
                  Sicht wird. Die Anomalie besteht darin, dass Tupel
                  eingefu"gt  werden ko"nnen, die nicht angezeigt wer-
                  den, weil die Qualifikation nicht erfu"llt ist.




        ING_DB 6.3/3           Juni 16, 1989                    QQQQUUUUEEEELLLL





        Referenz_Manual            - 63 -                       VVVVIIIIEEEEWWWW


             zu_2b

                  range of b is base
                  define view v ( dom = b.dom / 3 )
                  append to v (dom = 7)

                  Dieses append wird in  ein  append  auf  ein  phy-
                  sisches append folgender Art u"bersetzt:

                  append to base ( dom / 3 = 7 )

                  Dieses append ist im Sinne von QUEL nicht akzepta-
                  bel.

             zu_3:

                  range of b1 is base1
                  range of b2 is base2
                  define view v (b1.a, b2.c) where b1.b = b2.b

                  Datenbestand:


                  base1 | a  | b     base2 | b  | c     v  | a  | c
                  ~~~~~~|~~~~|~~~~   ~~~~~~|~~~~|~~~~   ~~~|~~~~|~~~~
                        | 7  | 0           | 0  | 3        | 7  | 3
                        | 8  | 0           | 0  | 4        | 7  | 4
                        |    |             |    |          | 8  | 3
                        |    |             |    |         >| 8  | 4 <



                        range of v is v
                        delete v where v.a = 8 and v.c = 4

                  Dieses Statement versucht, die markierte Zeile  zu
                  lo"schen,  was  physisch  auf  den  Basisrelationen
                  base1 und base2 nicht ausfu"hrbar ist.

        BBBBEEEEIIIISSSSPPPPIIIIEEEELLLL


             range of e is employee
             range of d is dept
             define view empdpt (ename=e.name,e.sal,dname=d.name)
               where e.mgr=d.mgr


        SSSSIIIIEEEEHHHHEEEE AAAAUUUUCCCCHHHH

             retrieve(quel), destroy(quel)
        \f1











        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 64 -                UUUUeeeebbbbeeeerrrrssssiiiicccchhhhtttt


        _1._2.  DDDDaaaatttteeeennnnbbbbaaaannnnkkkk----UUUUNNNNIIIIXXXX ----KKKKoooommmmmmmmaaaannnnddddoooossss ****












        _1._2._1.  UUUU""""bbbbeeeerrrrssssiiiicccchhhhtttt zzzzuuuu ddddeeeennnn KKKKoooommmmmmmmaaaannnnddddoooossss uuuunnnntttteeeerrrr UUUUNNNNIIIIXXXX  ****

        Im Gegensatz zu den Kommandos der Anfragesprache QUEL ko"nnen
        und  mu"ssen einige anspruchsvollere Kommandos auf dem Niveau
        der  Shell  eingegeben  werden,  d.h.,  wa"hrend  die   QUEL-
        Kommandos  erst  nach  dem  Eintreten in das Datenbanksystem
        durch qqqquuuueeeellll "dbname" abgearbeitet  werden  ko"nnen,  sind  die
        UNIX -Kommandos unmittelbar nach dem llllooooggggiiiinnnn:::: verfu"gbar.

        Bei den Kommandos,

                destroydb, purge, restore, sysmod,

        die  nur  vom  DBA  ausgefu"hrt  werden  ko"nnen,   wird   das
        alter/ego-Flag in der speziellen Form

                -s

        bereitgestellt.
        Das -s-Flag kann nur vom Systemadministrator angewendet wer-
        den und gibt ihm die Rechte des DBA.
        In den Beschreibungen werden diese Flags nicht mehr dokumen-
        tiert.

        Zum Inhalt:

        =>   -AMX(UNIX ) - AMX-Schnittstelle zu C
             aaaammmmxxxx { [ ffffllllaaaaggggssss ] filename }

        =>   -COPYDB(UNIX ) - kopiere eine Datenbank
             ccccooooppppyyyyddddbbbb [ ffffllllaaaaggggssss ] dbname directory
             { relname }

        =>   ----ccccooooppppyyyyrrrr [ ffffllllaaaaggggssss ] dbname relname
             { domname = fformat } from | into
             filename | "#"

        =>   -EQC(UNIX ) - QUEL-Schnittstelle zu C
             eeeeqqqqcccc { [ ffffllllaaaaggggssss ] file.q }

        =>   -CREATDB(UNIX ) - erzeuge eine Datenbank
             ccccrrrreeeeaaaattttddddbbbb [ ffffllllaaaaggggssss ] dbname

        =>   ----ccccrrrreeeeaaaatttteeeerrrr [ ffffllllaaaaggggssss ] dbname relname {domname fformat}






        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 65 -                UUUUeeeebbbbeeeerrrrssssiiiicccchhhhtttt


        =>   -DESTROYDB(UNIX ) - lo"sche eine existierende Datenbank
             ddddeeeessssttttrrrrooooyyyyddddbbbb [ ffffllllaaaaggggssss ] dbname

        =>   ----ddddeeeessssttttrrrrooooyyyyrrrr [ ffffllllaaaaggggssss ] dbname {relname}

        =>   -HELPR(UNIX ) - Information u"ber Datenbanken und  Rela-
             tionen
             hhhheeeellllpppprrrr [ ffffllllaaaaggggssss ] dbname [[integrity | permit |  view  ]{
             relname} ]

        =>   ----iiiinnnnddddeeeexxxxrrrr [ ffffllllaaaaggggssss ] dbname prim_rel index_rel {domname}

        =>   ----mmmmaaaannnnrrrr {sections}

        =>   ----mmmmooooddddiiiiffffyyyyrrrr [ ffffllllaaaaggggssss ] dbname relname storage_structure
                      {domname [ :sortorder]}

        =>   -QUEL(UNIX ) - ING_DB  relationales Datenbanksystem
             qqqquuuueeeellll [ ffffllllaaaaggggssss ] dbname [ process_table ]
             qqqquuuueeeellll____ddddtttt
             qqqquuuueeeellll____eeeennnngggg

        =>   -PRINTR(UNIX ) - drucke Relationen
             pppprrrriiiinnnnttttrrrr [ ffffllllaaaaggggssss ] dbname { relname }

        =>   -PURGE(UNIX ) - lo"sche alle verfallenen und  tempora"ren
             Relationen
             ppppuuuurrrrggggeeee [ ffffllllaaaaggggssss ] { dbname }

        =>   ----rrrreeeeffffrrrr {sections}

        =>   -RESTORE(UNIX ) - Recovery nach einem ING_DB  oder UNIX
              crash
             rrrreeeessssttttoooorrrreeee [ ffffllllaaaaggggssss ] { dbname }

        =>   ----ssssaaaavvvveeeerrrr [ ffffllllaaaaggggssss ] dbname relname month day year

        =>   -SYSMOD(UNIX ) - modifiziere  die  Systemrelationen  zu
             vordefinierten Speicherstrukturen
             ssssyyyyssssmmmmoooodddd [ ffffllllaaaaggggssss ] dbname { rrrreeeellllnnnnaaaammmmeeee }

        =>   -USERSETUP(UNIX ) - erstelle ING_DB  -Nutzerverzeichnis
             uuuusssseeeerrrrsssseeeettttuuuupppp [-]

        =>   -ZIP(UNIX ) - erstelle Eingabeprozedur  fu"r  AMX-  oder
             EQUEL-Programme
             zzzziiiipppp [[[[ffffllllaaaaggggssss]]]] mmmmaaaasssskkkk____ffffiiiilllleeee {flags[flag_arg]}
















        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 66 -                UUUUeeeebbbbeeeerrrrssssiiiicccchhhhtttt


                            IIIINNNNGGGG____DDDDBBBB  ---- RRRReeeeffffeeeerrrreeeennnnzzzz MMMMaaaannnnuuuuaaaallll






                                   TTTTEEEEIIIILLLL UUUUNNNNIIIIXXXX





        ################################################################
        ################################################################
        ##                                                            ##
        ##                                                            ##
        ##                                                            ##
        ##                                                            ##
        ##                                                            ##
        ##        ###   #     #  #####          ######  ######        ##
        ##         #    ##    # #     #         #     # #     #       ##
        ##         #    # #   # #               #     # #     #       ##
        ##         #    #  #  # #  ####         #     # ######        ##
        ##         #    #   # # #     #         #     # #     #       ##
        ##         #    #    ## #     #         #     # #     #       ##
        ##        ###   #     #  #####  ####### ######  ######        ##
        ##                                                            ##
        ##                                                            ##
        ##                                                            ##
        ##              #     # #     #   ###   #     #               ##
        ##              #     # ##    #    #     #   #                ##
        ##              #     # # #   #    #      # #                 ##
        ##              #     # #  #  #    #       #                  ##
        ##              #     # #   # #    #      # #                 ##
        ##              #     # #    ##    #     #   #                ##
        ##               #####  #     #   ###   #     #               ##
        ##                                                            ##
        ##                                                            ##
        ##                                                            ##
        ##                                                            ##
        ##                                                            ##
        ################################################################
        ################################################################



















        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 67 -                        AAAAMMMMXXXX


        NNNNAAAAMMMMEEEE

             amx - erweitertes Zugriffsmethoden-Interface
                   Access Method - an eXtended Interface

        SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS

             aaaammmmxxxx [ ffffllllaaaaggggssss ] file.x
             aaaammmmxxxxffff [ ffffllllaaaaggggssss ] file.x
             ssssaaaammmmxxxx [ ffffllllaaaaggggssss ] file.x
             ooooaaaammmmxxxx [ ffffllllaaaaggggssss ] file.x
             ooooaaaammmmxxxxffff [ ffffllllaaaaggggssss ] file.x

        BBBBEEEESSSSCCCCHHHHRRRREEEEIIIIBBBBUUUUNNNNGGGG

             Der AMX-Compiler hat prinzipiell eine a"hnliche Aufgabe,
             wie  der  Pre-Prozessor EQC. Seine herausragende Bedeu-
             tung beruht auf dem  schnellen  Zugriff  der  erzeugten
             Programme  auf  die  Tupel  von  Relationen  fu"r aktive
             Anwendungsfa"lle.

             Dieser  Vorteil  wurde  dadurch  erreicht,   dass   die
             Zugriffsmethode  aus  dem  Datenbanksystem herausgelo"st
             und verselbsta"ndigt in einem C-Programm la"uft.

             AAAAMMMMXXXX ist in das relationale  Modell  von  ING_DB   6.3/3
             integriert.   Durch ein AMX-Programm ko"nnen Daten einer
             ING_DB  6.3/3 Datenbank manipuliert werden. AMX ist  an
             die  Programmiersprache  C  gebunden,  es  erzeugt  ein
             gu"ltiges C-Programm,  das  mit  dem  C-Compiler  weiter
             verarbeitet   wird.   Es  besteht  aus  einem  Compiler
             (Preprozessor) und einer  Laufzeitbibliothek  "liba.a".
             Sein   Vorteil   besteht   in  der  wesentlich  ho"heren
             Zugriffsgeschwindigkeit (gegenu"ber EQC: Faktor 0,1  bis
             0,01),  sein Nachteil in der Beschra"nkung auf DDDDMMMMLLLL -Kom-
             mandos.  AMX ist die  entscheidende  Voraussetzung  zur
             Erzeugung  laufzeiteffektiver Programme auf 16-bit Com-
             putern.

             CCCCoooommmmppppiiiillllaaaattttiiiioooonnnn

             AMX-Programmnamen mu"ssen mit ".x" enden. Der Aufruf des
             Preprozessors  und  der  automatische Ruf des Compilers
             erfolgt mit

                     amx -o file file.x

             Es ko"nnen die, von  cc  bekannten  Flags  und  Optionen
             genutzt  werden.   Die fu"r amx notwendigen Bibliotheken
             werden  automatisch  eingezogen,  private  Bibliotheken
             sind anzugeben.

             AAAAcccchhhhttttuuuunnnngggg!!!!  Beachten sie, dass das  ausfu"hrbare  Programm
             auf  den  Modus "6711" (chmod) eingestellt und "ing_db"
             angeeignet ist. Sofern Programme kopiert  werden,  sind
             diese Eigenschaften wiederherzustellen!







        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 68 -                        AAAAMMMMXXXX


             SSSSyyyynnnnttttaaaaxxxx

             AMX-Programme  laufen  jetzt  im   current   directory,
             d.h.  file-Namen mu"ssen nicht la"nger als volle  Pfadna-
             men angegeben werden.
             Der AMX-Compiler hat  den  C-Compiler  als   Untermenge
             integriert,    d.h.   die   Benutzung   von   AMX(UNIX)
             entspricht der Benutzung von cc(1).
             Der   AMX-Compiler   kennt  gegenu"ber  dem   C-Compiler
             keine  neuen  Flags,  alle  Flags  sind  also Flags von
             cc(1).
             Bei der Erzeugung von  Datenbankprogrammen  muss  immer
             der  AMX-Compiler  anstelle des  C-Compilers  verwendet
             werden.  Fu"r das Linken eines  Programmes muss das Flag
             `-o name' zur  Angabe des  Programmnamens  spezifiziert
             werden,  um das automatische  Laden   der   Laufzeitbi-
             bliothek des AMX- Compilers anzuweisen.  Die  Laufzeit-
             bibliothek  muss  unter  dem  Namen    `.../lib/liba.a'
             bereitgestellt  werden,   darf also  nach  der  Generi-
             erung nicht nach  `/usr/lib'  bzw.  `/lib' bewegt  wer-
             den.

             Beispiele:

             1)   Erzeuge Objektmodul aus einer AMX-Quelle
                      amx -c -O neuheit.x

             2)   Erzeuge Programm aus einem Objektmodul
                      amx -o neuheit neuheit.o

             3)   Erzeuge Programm aus einer AMX-Quelle
                      amx -O -o neuheit neuheit.x

             4)   Erzeuge Programm aus einer AMX- und einer C-Quelle
                      amx -O -o neuheit.x zusatz.c

             5)   Erzeuge Objektmodule aus einer AMX- und  einer  C-
                  Quelle
                      amx -c -O neuheit.x zusatz.c oder
                      amx -c -O neuheit.x;cc -c -O zusatz.c

             6)   Erzeuge Programm aus Objektmodulen
                      amx -o neuheit neuheit.o zusatz.o

             Natu"rlich ko"nnen auch  Bibliotheken verarbeitet werden,
             bzw.  `neuheit.o' kann in eine Bibliothek gestellt wer-
             den.  Auf jeden Fall muss mit dem AMX-Compiler  gelinkt
             werden !

             Neben dem AMX-Statement
                ## ing_db [flags] db_name
             gibt es jetzt
                ## shared [flags] db_name
             wobei `ing_db' die Datenbank exklusiv (also alleinig) und
             `shared' die Datenbank parallel verwendbar ero"ffnet.

             Das neue AMX-Statement
                ## tuplelength rel_name  c_var_name  stellt  in  der
             numerischen   C-Variablen   `c_var_name' die Tupella"nge
             der  Relation   `rel_name'   bereit.    Es   gibt   die



        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 69 -                        AAAAMMMMXXXX


             Mo"glichkeit  Transaktionen   (TA)  zu  formulieren, die
             nutzerbezogene   Datenbankkonsistenzen    realisierren.
             Eine TA wird durch
                ## use ([+]rel_name {, [+]rel_name}) eingeleitet und
             durch
                ## commit beendet.  Das Zeichen `+' gibt  an,   dass
             die Relation gea"ndert werden soll (REPLACE, DELETE oder
             APPEND).  Fehlt diese Angabe,  wird  von  der  Relation
             gelesen   (RETRIEVE).   Folgende Regeln sollten bei der
             Formulierung von TA's beachtet werden:

             1)   Immer `shared' verwenden, wenn nicht  ausdru"cklich
                  die  alleinige  Verwendung  der  Datenbank beabsi-
                  chtigt ist.

             2)   Immer TA's formulieren, wenn Recherchen u"ber  mehr
                  als eine Relation gehen sollen.

             3)   Alle A"nderungen in TA's einkleiden.

             4)   Wenn  eine   TA  la"uft,   kann  keine  weiter   TA
                  begonnen werden.

             5)   Innerhalb einer Recherche (RETRIEVE) kann keine TA
                  begonnen  werden,  die   Recherche muss in die  TA
                  eingeschlossen werden.

             6)   Innerhalb  einer  TA  kann  keine  Recherche  oder
                  A"nderung fu"r eine Relation,  die nicht Bestandteil
                  der TA ist, gestartet werden.  Die  Relation  muss
                  in die  TA eingeschlossen werden.

             A"hnlich  EQUEL   werden   AMX-Anweisungen   durch   die
             Kennzeichnung  von  "##"  am  Zeilenanfang  in  das  C-
             Programm eingebettet.

             Folgende Typen von C-Variablen werden unterstu"tzt:

                  - short         (i2)
                  - int           (i2)
                  - long          (i4)
                  - float         (f4)
                  - double        (f8)
                  - char *
                  - char []       (c1...255)

             Jede Variable  ist  global  zu  deklarieren,  der  Wer-
             tebereich   ist  implementationsabha"ngig  (Klammerwerte
             beziehen sich auf 16-Bit-Prozessoren).

             In C-Programmen stehen die Typen

                 i1, i2, i4, f4 und f8


             fu"r  die   Deklaration   von   Austauschvariablen   zur
             Verfu"gung.
             Alle AMX-Routinen und globale  Variablen  beginnen  mit
             den  Zeichen  "AA",  somit sind alle Namen der Form "AA
             ..."  reserviert  und  sollten  in  den  AMX-Programmen



        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 70 -                        AAAAMMMMXXXX


             vermieden werden.

             Im  AMX-Programm  muss  die  Eintrittsfunktion  "amx()"
             heissen,  da  der  Preprozessor ein "main()" generiert.
             Die Datenbank muss, einschliesslich  zu  verarbeitender
             Relationen  (Struktur) gegru"ndet sein.  Die erste Zeile
             des Programms benennt die Datenbank:

                     ## ing_db [flags] dbname
                     oder
                     ## shared [flags] dbname

             Die ausfu"hrliche Beschreibung folgt im  Teil  II,  hier
             folgende Kurzform:

             Bezeichnung der verwendeten Datenbank (Einzel-,
             Mehrnutzer-DB):
             """"########    iiiinnnngggg____ddddbbbb [[[[ffffllllaaaaggggssss]]]] ddddbbbbnnnnaaaammmmeeee"""" ooooddddeeeerrrr """"########   qqqquuuueeeellll [[[[ffffllllaaaaggggssss]]]] ddddbbbbnnnnaaaammmmeeee""""

             """"########    sssshhhhaaaarrrreeeedddd [[[[ffffllllaaaaggggssss]]]] ddddbbbbnnnnaaaammmmeeee""""

             O"ffnen der Relation:
             """"########    ooooppppeeeennnn rrrreeeellll""""

             Schliessen der Relation:
             """"########    cccclllloooosssseeee rrrreeeellll""""

             Fu"r Mehrnutzer-DB Sperrbereich zum Update der Kataloge
             einstellen:
             """"########    uuuusssseeee (((([[[[mmmmooooddddeeee]]]]rrrreeeellll,,,, ........))))""""

             """"########    ccccoooommmmmmmmiiiitttt""""

             Anfu"gen an eine Relation:
             """"########    aaaappppppppeeeennnndddd rrrreeeellll ttttaaaarrrrggggeeeetttt""""

             Werte im Tupel ersetzen:
             """"########    rrrreeeeppppllllaaaacccceeee ttttaaaarrrrggggeeeetttt""""

             Tupel lo"schen:
             """"########    ddddeeeelllleeeetttteeee""""

             Tupel drucken:
             """"########    pppprrrriiiinnnntttt (((())))""""

             Anzahl der Tupel einer Relation bestimmen:
             """"########    ttttuuuupppplllleeeeccccoooouuuunnnntttt cccc____vvvvaaaarrrr""""

             Tupel finden (Recherche und positionieren),
             analog "retrieve" aufzufassen:
             """"########    rrrreeeettttrrrriiiieeeevvvveeee rrrreeeellll qqqquuuuaaaallll ttttaaaarrrrggggeeeetttt""""

             EEEErrrrllllaaaa""""uuuutttteeeerrrruuuunnnngggg::::










        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 71 -                        AAAAMMMMXXXX



             flags:    +Zahl    =: Anzahl zusa"tzlicher
                                   Puffer fu"r die Zugriffs-
                                   methoden

                       -u login =: alter-ego-Flag fu"r
                                   das AMX-Programm



             rel:    Relationenname
             qual:   Qualifikation =: $dom1 op $dom2, ...
                                      $dom1 op c_var, ...
                                      $dom1 = c_const
             target: Wertzuweisung =: ($dom1=$dom2, ...)
                                      (c_var=$dom1, ...)
                                      ($dom1=c_var, ...)
                                      $dom1 = c_const
             op:     Vergleich     =: =, >, >=, <, <=, !=
             c_var:  fu"r amx gu"ltige C-Variable
             mode:   Lesen und Schreiben =: +
                     Lesen =: (Standard, ohne Angabe)


             Zur Verdeutlichung folgende Beispiele:


                 ----------------------------------------------------

                 ##  ing_db dt

                 amx()
                 {
                 /* analog: retrieve (personal.all) */
                 ## open personal
                 ## retrieve personal
                 ## {
                 ##     print ()
                 ## }
                 ## close personal
                 }






















        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 72 -                        AAAAMMMMXXXX





                 ## ing_db demo

                 ## i2    tnum;

                 amx()
                 {
                 /* analog: retrieve (teile.tname, teile.tnum)
                 **           where teile.tnum = 2 or teile.tnum = 10
                 */
                 ## open teile
                 ## retrieve teile $tnum <= 10 and $tnum >= 2 (tnum = $tnum)
                 ## {
                       if (tnum == 2 || tnum == 10)
                       {
                 ##            print ($tname, $tnum)
                               putchar('0);
                       }
                 ## }
                 ## close teile
                 }

             Die Definition im "retrieve" $tnum = 10 and $tnum  =  2
             wu"rde  einen  Widerspruch  liefern,  da  die  logischen
             Ausdru"cke nicht mit "or" verknu"pft werden ko"nnen.


        ------------------------------------------------------


        Beispiel fu"r geschachtelte "retrieve's":


        ## shared demo


        ## char        personal[21];
        ## int         leiter;

        amx()
        {
           printf("retrieve (personal.name) und den Chef von ihm\n");
           printf("------------\n");
        ## open personal

        ## retrieve personal (personal = $name, leiter = $leiter)
        ## {
                printf("personal %s ", personal);
                if (leiter == 0)
                {
                  printf("Direktor\n");
                  continue;
                }
        ##   scan personal $num = $leiter (personal = $name)
        ##   {
                  printf("Leiter %s\n", personal);;
        ##   }
        ## }



        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 73 -                        AAAAMMMMXXXX


        ## close personal
           printf("------------\n");
        }

        ----------------------------------------------------

        Die mit "printf()" realisierten Ausgaben zeigen eine  Analo-
        gie zum entsprechenden QUEL-Kommando, mit der Ausnahme, dass
        anstelle der target_variable'n der Relationenname  verwendet
        wurde.

        Beispiel fu"r einen rekursiven "retrieve" als Prozedur:


        ## shared demo


        ## i2          leiter;
        ## char        personal[21];

        amx()
        {
           printf("retrieve (personal.name) and all chefes of him\n");
           printf("------------\n");
        ## open personal

        ## retrieve personal (personal = $name, leiter = $leiter)
        ## {
                scan();
        ## }

        ## close personal
           printf("------------\n");
        }

        scan()
        {
           printf("%s ", personal);
           if (leiter == 0)
           {
                putchar('\n');
                return;
           }
        ## retrieve personal $num = leiter
        ##   (personal = $name, leiter = $leiter)
        ## {
                scan();
        ## }
        }

        ----------------------------------------------------

        Ermittlung der Tupelanzahl:


        ## shared demo


        ## i2          leiter;
        ## char        personal[21];



        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 74 -                        AAAAMMMMXXXX


        amx()
        {
           register int count;
           int         c_cnt;
           int         l_cnt;
           int         p_cnt;

           printf("retrieve (personal.name) und seine Position\n");
           printf("------------\n");
           c_cnt = l_cnt = p_cnt = 0;
        ## open personal

        ## retrieve personal (personal = $name, leiter = $leiter)
        ## {
                printf("%s ", personal);
                if (leiter == 0)
                {
                  printf("chef\n");
                  c_cnt++;
                  continue;
                }
                count = 0;
        ##   scan personal $leiter = $num
        ##   {
                  count++;
        ##   }
                if (count)
                {
                  printf("Leiter\n");
                  l_cnt++;
                }
                else
                {
                  printf("Angestellter\n");
                  p_cnt++;
                }
        ## }

        ## close personal
           printf("TOTAL:\t%3d\n", c_cnt + l_cnt + p_cnt);
           printf("\t%3d Direktoren\n", c_cnt);
           printf("\t%3d Leiter\n", l_cnt);
           printf("\t%3d Angestellte\n", p_cnt);
           printf("------------\n");
        }

        ----------------------------------------------------

        Rekursiver "retrieve" zur Ermittlung einer Struktur:


        ## shared demo


           int         level;
        ## i2          leiter;
        ## char        personal[21];

        amx()
        {



        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 75 -                        AAAAMMMMXXXX


           printf("retrieve personal structure\n");
           printf("------------\n");
        ## open personal
           leiter = 0;
           scan();
        ## close personal
           printf("------------\n");
        }

        scan()
        {
           register int          i;

           if (leiter)
           {
                for (i = level - 1; i; --i)
                  putchar('\t');
                printf("%s\n", personal);
           }
           level++;
        ## retrieve personal $leiter = leiter
        ##    (personal = $name, leiter = $num)
        ## {
                scan();
        ## }
           --level;
        }

        ----------------------------------------------------

        Verwendung von "use" und "commit":

        ## shared demo

        amx()
        {
           printf("retrieve (lieferung.lnum)\n");
           printf("where teile.tname = \"Zentraleinheit\"\
                 and lieferung.tnum = teile.tnum\n");
           printf("------------\n");
        ## open teile
        ## open lieferung

        ## use (teile, lieferung)
        ## retrieve teile $tname = "Zentraleinheit"
        ## {
        ##   retrieve lieferung $tnum = $tnum
        ##   {
        ##        print ($lnum)
        ##   }
        ## }
        ## commit

        ## close teile
        ## close lieferung
           printf("------------\n");
        }

        ----------------------------------------------------




        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 76 -                        AAAAMMMMXXXX


        Die folgenden Beispiele sind so gehalten, dass sie sich ohne
        Mu"he selbst orientieren ko"nnen.

        ## shared demo

        amx()
        {
           printf("delete personal\n");
           printf("retrieve (personal.all)\n");
           printf("------------\n");
        ## open personal

        ## use (+personal)
        ## retrieve personal
        ## {
        ##   delete
        ## }
        ## commit

        ## use (personal)
        ## retrieve personal
        ## {
        ##   print ()
                printf("------------\n");
        ## }
        ## commit

        ## close personal
           printf("------------\n");
        }


        ----------------------------------------------------

        ## shared demo

        amx()
        {
           printf("delete personal where personal.leiter = 129\n");
           printf("retrieve (personal.all)\n");
           printf("------------\n");
        ## open personal

        ## use (+personal)
        ## retrieve personal $leiter = 129
        ## {
        ##   delete
        ## }
        ## commit

        ## use (personal)
        ## retrieve personal
        ## {
        ##   print ()
                printf("------------\n");
        ## }
        ## commit

        ## close personal
           printf("------------\n");



        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 77 -                        AAAAMMMMXXXX


        }


        ----------------------------------------------------

        ## shared demo

        amx()
        {
           printf("append personal (name = \"Heinrich, Heinz\",\
                 gehalt = 10000)\n");
           printf("retrieve (personal.name, personal.gehalt)\n");
           printf("------------\n");
        ## open personal

        ## use (+personal)
        ## append personal ($name = "Heinrich, Heinz",
        ##    $gehalt = 10000)
        ## commit

        ## use (personal)
        ## retrieve personal
        ## {
        ##   print ($name, $gehalt)
        ## }
        ## commit

        ## close personal
           printf("------------\n");
        }


        ----------------------------------------------------

             DDDDeeeekkkkllllaaaarrrraaaattttiiiioooonnnneeeennnn

             C-Variable, die zwischen den Doma"nen und dem C-Programm
             Werte  u"bergeben  oder u"bernehmen sollen, mu"ssen global
             deklariert werden und durch "##"  amx  bekannt  gemacht
             werden.  Die  Deklaration muss vor amx() stehen und das
             Zeilenende mit ";" abgeschlossen  werden.   Die  Anzahl
             dieser  Variablen  ist  begrenzt  (unabha"ngig  vom Typ:
             255).

             """"FFFFeeeehhhhlllleeeerrrr uuuunnnndddd UUUUnnnntttteeeerrrrbbbbrrrreeeecccchhhhuuuunnnnggggeeeennnn""""

             UUUU""""bbbbeeeerrrrsssseeeettttzzzzuuuunnnnggggssssffffeeeehhhhlllleeeerrrr werden in folgender Form ausgegeben:

                     Zeilennummer: Fehlertext

             U"bersetzungsfehler  fu"hren  nicht   zum   Abbruch   der
             U"bersetzung.   Fehler  sind  selbsterkla"rend.   Syntak-
             tische Fehler werden durch die Ausschrift

                 syntax error

             ohne na"here Erla"uterung ausgewiesen.  Aufgrund der ein-
             fachen  Syntax  von AMX muss der Fehler selbst gedeutet
             werden.
             Angaben von  Zeilennummern  beziehen  sich  sowohl  vom



        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 78 -                        AAAAMMMMXXXX


             AMX-Compiler  als  auch  vom  C-Compiler  auf  die AMX-
             Quelle.

             Neben den U"bersetzungsfehlern werden vom  AMX  Compiler
             bzw.   dem ING_DB  6.3/3 System Fehler erzeugt, die zum
             Abbruch der U"bersetzung fuehren.

             LLLLaaaauuuuffffzzzzeeeeiiiittttffffeeeehhhhlllleeeerrrr

             AMX  Laufzeitfehler  werden  durch  die   Ausgabe   von
             mehrzeiligen Meldungen protokolliert. Nach einem Fehler
             wird das AMX Programm mit dem exit-Wert 1 beendet. Alle
             Fehlernummern  <  100  verweisen auf interne Fehler des
             Datenbanksystems ING_DB  6.3/3 und  sollten  von  einem
             ING_DB   6.3/3  Systemprogrammierer  analysiert werden.
             Auf jeden Fall  sollte  die  Konsistenz  der  Datenbank
             u"berprueft werden (siehe (RESTORE(UNIX )). Alle Fehler-
             nummern  >=  100  sind  Nutzerfehler,  die  vom  Anwen-
             dungsprogrammierer selbst analysiert werden ko"nnen.

             In der ersten Zeile wird die Nummer  des  aufgetretenen
             Fehlers ausgewiesen:

                     AMXERR: * * * * * * *   VALUE


             Ist   die   C-Variable   "errno"   ungleich   0,   wird
             anschliessend  der UNIX -Fehlerwert (siehe UNIX -Manual
             INTRO(2)) protokolliert:

                     UNIX   error   VALUE


             Dieser Wert muss nicht unbedingt mit dem  aufgetretenen
             Fehler  zusammenha"ngen,  da  die C-Variable "errno" vor
             einem UNIX -Ruf nicht auf 0 gesetzt wird und auf einen,
             im Programm weit zuru"ckliegenden Fehler verweisen kann.

             Hat die Zugriffsmethode einen Fehler erzeugt,  wird  er
             in folgender Form protokolliert:

                     ACCESS  error   VALUE


             Die Werte VALUE haben folgende Bedeutung:

             -1   read error
             -2   write error
             -3   open error
             -4   open error of system catalog "relation"
             -5   open error of system catalog "attribute"
             -6   missing or too many domains for a relation
             -7   close error
             -8   unknown storage structure
             -9   invalid tupel identifier (tid)
             -10  attempt to open a view







        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 79 -                        AAAAMMMMXXXX


             Der folgende AMX Rueckkehrwert

                     AMX-RCVALUE


             verweist auf Inkonsistenzen in der Datenbasis und  muss
             von einem ING_DB  6.3/3 Systemprogrammierer ausgewertet
             werden.

             Zuletzt wird die oben genannte Fehlernummer durch einen
             Text na"her erla"utert.




















































        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 80 -                     CCCCOOOOPPPPYYYYDDDDBBBB


        NNNNAAAAMMMMEEEE

             copydb - erzeuge Quellprogramme,  um  Relationen  einer
             Datenbank zu sichern bzw. neu zu erstellen

        SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS

             ccccooooppppyyyyddddbbbb [ ffffllllaaaaggggssss ] dbname directory { relname }

        BBBBEEEESSSSCCCCHHHHRRRREEEEIIIIBBBBUUUUNNNNGGGG

             copydb  erzeugt  zwei  QUEL-Programme  im   angegebenen
             ddddiiiirrrreeeeccccttttoooorrrryyyy::::

             copy.out  entha"lt  QUEL-Statements  zum  KKKKooooppppiiiieeeerrrreeeennnn   von
                       Relationen der mit ddddbbbbnnnnaaaammmmeeee bezeichneten Daten-
                       bank auf ((((ccccooooppppyyyy----iiiinnnnttttoooo))))  UNIX  -Files  innerhalb
                       des  angegebenen  ddddiiiirrrreeeeccccttttoooorrrryyyy....  Es erfolgt eine
                       Auswahl der Relationen: Grundsa"tzlich  werden
                       nur  solche  Relationen  kopiert, fu"r die der
                       Nutzer Eigner  ist.   Es  werden  davon  alle
                       Relationen  angesprochen,  wenn nicht im Kom-
                       mando mit {relname} eine konkrete  Aufza"hlung
                       erfolgt.

             copy.in   entha"lt QUEL-Statements, mit denen  die  eben
                       ausgewa"hlten  Relationen  erzeugt werden, die
                       Ru"ck-Kopien  ((((ffffrrrroooommmm))))  erfolgen,  ggf.  Indizes
                       erzeugt  werden und auch ggf. Modifizierungen
                       ((((mmmmooooddddiiiiffffyyyy)))) der erzeugten  Relationen  erfolgen.
                       Alle Zugriffsberechtigungen, Integrita"ten und
                       Sichten wurden definiert.

             Die Programme sind damit dazu  verwendbar,  eine  Menge
             von  Relationen  in  Files eines directory zu speichern
             und aus diesen auf einer leeren Datenbank wieder  deren
             alten  Zustand herstellen zu ko"nnen.  Ausserdem liefert
             das Programm die Dokumentation zur Struktur  der  Rela-
             tion.

             Die erzeugten Files erhalten den  gleichen  Namen,  wie
             die  der  Relationen:  der  dem Nutzer bekannte rrrreeeellllnnnnaaaammmmeeee
             gefolgt vom  ING_DB   6.3/3-Usercode  (2  Bytes).   Das
             ddddiiiirrrreeeeccccttttoooorrrryyyy  muss  mit vollem Pfadnamen angegeben werden.
             Der Pfad darf nicht dem Datenbankpfad entsprechen.  Das
             ist   insbesondere  zu  beachten,  wenn  die  Datenbank
             ausserhalb des Standards angelegt ist.

        BBBBEEEEIIIISSSSPPPPIIIIEEEELLLL

                cd /mnt/meindir
                copydb db backup
                quel db < backup/copy.out
                tar r1 backup
                rm -r backup

                tar x1
                quel db < backup/copy.in





        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 81 -                     CCCCOOOOPPPPYYYYDDDDBBBB


        SSSSIIIIEEEEHHHHEEEE AAAAUUUUCCCCHHHH

             quel(unix),  copy(quel),   create(quel),   index(quel),
             modify(quel),       define(quel),      integrity(quel),
             view(quel), permit(quel)

        HHHHIIIILLLLFFFFEEEENNNN

             ccccooooppppyyyyddddbbbb erzeugt in  copy.in  QUEL-Statements  zur  Modi-
             fizierung  von Relationen und Indizes auf die Speicher-
             struktur, die sie  vorher  hatten.   Allerdings  werden
             dabei    weder   fillfactor-   noch   minpage-/maxpage-
             Spezifikationen erzeugt.

             Bei  Sichten  und   Zugriffsrechten   ko"nnen   Probleme
             entstehen,  wenn die Sichten oder Zugrifsrechte nutzer-
             fremde Relationen einschliessen und diese zum Zeitpunkt
             der Abarbeitung des ccccooooppppyyyy____iiiinnnn -Programms noch nicht exis-
             tieren.

             Zu einer sich daraus notwendig ergebenden oder sonstwie
             gewu"nschten Anpassung ko"nnen die Kommandofiles editiert
             werden.








































        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 82 -                      CCCCOOOOPPPPYYYYRRRR


        NNNNAAAAMMMMEEEE

             copyr - Kopieren von Daten einer Relation von / auf ein
             UNIX -Standart-File

        SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS

             ccccooooppppyyyyrrrr  [  ffffllllaaaaggggssss  ]dbname   relname   {domname   format}
             iiiinnnnttttoooo||||ffffrrrroooommmm file

        BBBBEEEESSSSCCCCHHHHRRRREEEEIIIIBBBBUUUUNNNNGGGG

             ccccooooppppyyyyrrrr transportiert die  Daten  zwischen  einer  ING_DB
             -Relation und einem UNIX -Standard-File.  Ein Tupel der
             Relation mit seinen Doma"nen wird einem Satz  der  Datei
             mit  seinen  Feldern zugeordnet.  Die Transportrichtung
             <<<<ddddiiiirrrreeeeccccttttiiiioooonnnn>>>> ist entweder iiiinnnnttttoooo oder ffffrrrroooommmm....  Die mit <<<<rrrreeeellll----
             nnnnaaaammmmeeee>>>>  bezeichnete Relation muss jedenfalls existieren.
             Die <domname>'s mu"ssen Doma"nen  dieser  Relation  sein.
             Das  ihnen  zugeordnete  Format  <<<<ffffffffoooorrrrmmmmaaaatttt>>>>  ist das der
             Felder  des  UNIX  -File.   Das  UNIX  -File  muss  mit
             "Filename"  durch  einen  kompletten Pfadnamen (auf der
             Wurzel, also mit "/" beginnend) angegeben werden.

             Beim Kopieren in die Relation ( ccccooooppppyyyyrrrr  <relname>  (...)
             ffffrrrroooommmm "Filename" ) wird das Statement nur vom Eigentu"mer
             der Relation angenommen.  Die Relation darf keine  Sys-
             temrelation  oder  kein  Sekunda"rindex  sein und keinen
             Sekunda"rindex haben.

             Beim Kopieren in das UNIX -File ( ccccooooppppyyyyrrrr <relname> (...)
             iiiinnnnttttoooo "Filename" ) wird das Statement nur vom Eigentu"mer
             der Relation angenommen oder von einem Nutzer, der  fu"r
             sie Zugriffsberechtigung rrrreeeettttrrrriiiieeeevvvveeee hat.  Der Nutzer muss
             die entsprechende Berechtigung fu"r  das  file_directory
             haben.  Das UNIX -File wird mit file_mode 0600 angelegt
             oder falls es schon vorhanden ist,  neu  erzeugt.   Der
             ccccooooppppyyyyrrrr  verwendende  Nutzer  wird  Eigentu"mer  des  UNIX
             -File.

             Beim Kopieren werden folgende Formate <<<<ffffffffoooorrrrmmmmaaaatttt>>>> fu"r die
             Felder des UNIX -File unterstu"tzt:


                  iiii1111,,,, iiii2222,,,, iiii4444
                   1-, 2- oder 4-Byte-Integer

                  ffff4444,,,, ffff8888
                   4- oder 8-Byte Gleitkomma (einfache oder doppelte
                  Genauigkeit)

                  cccc1111,,,, cccc2222,,,, ............ cccc222255555555
                   - Zeichenkette fester angegebener La"nge

                  cccc0000[[[[<<<<ddddeeeelllliiiimmmm>>>>]]]] |||| """"cccc0000<<<<ddddeeeelllliiiimmmm>>>>"""" - Zeichenkette variabler
                  La"nge beendet durch den Begrenzer <<<<ddddeeeelllliiiimmmm>>>> (delimi-
                  tor)






        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 83 -                      CCCCOOOOPPPPYYYYRRRR


                  dddd0000[[[[<<<<ddddeeeelllliiiimmmm>>>>]]]] |||| """"dddd0000<<<<ddddeeeelllliiiimmmm>>>>""""
                  dddd1111 ............ dddd222255555555
                  -  ein  fu"r  die  Relation  bedeutungsloses   Feld
                  (dummy-Feld siehe folgend).

             Die La"ngenangaben in <<<<ffffffffoooorrrrmmmmaaaatttt>>>> du"rfen  fu"hrende  Nullen
             haben.

             Die im Statement zugeordnete Doma"ne  der  Relation  zum
             Feld  des File mu"ssen nicht vom selben Typ oder dersel-
             ben La"nge sein, ccccooooppppyyyyrrrr  fu"hrt  die  notwendigen  Konver-
             tierungen durch (s. aber unten Laufzeitfehler).

             Im Statement mu"ssen die Doma"nen  der  Relation  in  der
             Reihenfolge   der  Felder  der  Sa"tze  des  UNIX  -File
             aufgeza"hlt  werden.   Die  Zuordnung  in  der  Relation
             erfolgt  per  Spaltennamen.   Nicht aufgeza"hlte Doma"nen
             der Relation bleiben vom Kopieren  ausgeschlossen  (bei
             ffffrrrroooommmm  werden sie durch 0 bzw. eine Leerkette "" initia-
             lisiert).  Der Satz des  UNIX  -File  muss  vollsta"ndig
             beschrieben   werden.    Vom  Kopieren  ausgeschlossene
             Felder mu"ssen als dddduuuummmmmmmmyyyy-Felder aufgeza"hlt werden.   Der
             fu"r  die dummy-Felder im Statement angegebene <<<<ddddoooommmmnnnnaaaammmmeeee>>>>
             ist fu"r die Relation bedeutungslos.

             ccccooooppppyyyyrrrr unterstu"tzt die Arbeit mit variabel  langen  Fel-
             dern  auf  dem  UNIX  -File,  fu"r  die  das, sie hinten
             begrenzende Zeichen, als Begrenzer (delimitor)  <<<<ddddeeeelllliiiimmmm>>>>
             bestimmt  werden  muss.  Da die u"blicherweise gewa"hlten
             Begrenzer auch innerhalb  der  QUEL  eine  syntaktische
             Bedeutung   haben,  ko"nnen  solche  Zeichen  symbolisch
             angegeben werden:

                Bezeichner
                  fu"r        bezeichnet
                <<<<ddddeeeelllliiiimmmm>>>>
                -------------------------------------------------
                nl           new_line-Zeichen <nl>
                tab          Tabulator-Zeichen <tab>
                sp           (space) <blank>-Zeichen
                nul          "\0" Byte vom Wert 0
                null         "\0" Byte vom Wert 0
                comma        Komma ","
                colon        Semikolon ";"
                dash         Bindestrich "-"
                lparen       (left  parenthesis) "("
                rparen       (right parenthesis) ")"
                x            ein beliebiges Zeichen `x'
                "x"          ein beliebiges Zeichen `x'


             Man  kann  das  <<<<ffffffffoooorrrrmmmmaaaatttt>>>>  auch  als  """"cccc0000<<<<ddddeeeelllliiiimmmm>>>>""""  bzw.
             """"dddd0000<<<<ddddeeeelllliiiimmmm>>>>  schreiben,  um  eine  Spezialbedeutung  von
             <delim> innerhalb von QUEL aufzuheben.

             Bei  der  Arbeit  mit  variablen  Feldern  sind  Beson-
             derheiten   abha"ngig   von   der  Transportrichtung  zu
             beachten.





        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 84 -                      CCCCOOOOPPPPYYYYRRRR


             In die Relation:
             ccccooooppppyyyyrrrr rrrreeeellllnnnnaaaammmmeeee (...) ffffrrrroooommmm "Filename" :

                  Wenn <<<<ddddeeeelllliiiimmmm>>>> im Statement bei  cccc0000  oder  dddd0000  nicht
                  angegeben  ist,  wird das erste auftretende Komma,
                  <tab> oder <nl> als Feldbegrenzer gewertet,  sonst
                  begrenzt  das angegebene Zeichen <delim> das Feld.
                  Das Begrenzerzeichen wird nicht  in  das  Attribut
                  u"bernommen.  Entha"lt das Feld das Begrenzerzeichen
                  an Stellen, wo es noch nicht Begrenzer sein  soll,
                  ist diesem Zeichen im Feld ein <backslash> ( "\" )
                  voranzustellen.

                  Beispiele:

                          chardom= c0     Zeichenkette endend
                                          auf Komma, <tab> oder <nl>
                          chardom= c0nl   dto endend auf <nl>
                          chardom= "c0#"  dto endend auf #


                  Wenn chardom= c0comma  definiert  ist,  wu"rde  der
                  Feldinhalt
                       Neumann\, Karl,
                  den Attributwert
                       Neumann, Karl
                  erzeugen.

                  Es wird empfohlen, bei der Anlage von UNIX -Files,
                  die  zur  Kopie  auf ING_DB -Relationen vorgesehen
                  sind, einen Satzbegrenzer  einzufu"hren,  der  sich
                  von  allen  Feldbegrenzern unterscheidet.  Dadurch
                  wird ccccooooppppyyyyrrrr  synchronisiert,  auch  wenn  ein  Satz
                  fa"lschlicherweise  nicht  die  richtige Anzahl von
                  Feldern hat.

             In das File:
             ccccooooppppyyyyrrrr relname (...) iiiinnnnttttoooo "Filename" :

             c0

                  Das Attribut  wird  in  eine  Zeichenkette  fester
                  La"nge   umgewandelt,   diese   wird  in  das  File
                  geschrieben.     Fu"r     die     Attribute     von
                  Zeichenketten-Doma"nen  ergibt  sich  die La"nge aus
                  dem Doma"nen-Format <<<<ffffoooorrrrmmmmaaaatttt>>>> selbst, fu"r  Attribute
                  numerischer  Doma"nen erfolgt eine ascii-Umwandlung
                  auf das Druckformat, das bei  Sitzungsstart  durch
                  die  ING_DB  -Optionen ----iiii,,,, ----ffff,,,, oder ----cccc beeinflusst
                  werden kann (s.  qqqquuuueeeellll(unix)).

             c0<delim>

                  wie c0, zusa"tzlich wird das Zeichen <delim> in das
                  Feld geschrieben.








        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 85 -                      CCCCOOOOPPPPYYYYRRRR


             d0

                  unzula"ssig

             d0<delim>

                  Das Zeichen <delim> wird einmal in  den  Satz  des
                  File  geschrieben;  der  im  Statement  angegebene
                  <domname> ist bedeutungslos.

             d1, d2, ... d255

                  Der <domname> muss einer der oben als  "Bezeichner
                  fu"r  <delim>"  aufgeza"hlten  sein.   Das  von  ihm
                  bezeichnete Zeichen wird 1,2, ... 255 mal  in  den
                  Satz des UNIX -File geschrieben.

             d1<delim>, d2<delim>, ... d255<delim>

                  Das Zeichen <delim> wird 1,2, ...255  mal  in  das
                  UNIX  -File geschrieben.  Der im Statement angege-
                  bene <domname> ist bedeutungslos.

             Zur Sicherung  und  Wiederherstellung  einzelner  Rela-
             tionen kann das Statement in der Kurzform:


                  ccccooooppppyyyy relname () direction "Filename"

             verwendet werden physiche  Kopie  =  (bulk_copy).   Das
             Statement  wird  in  diesem Falle automatisch mit allen
             Doma"nen der Relation in deren Erzeugungsreihenfolge und
             deren   Formaten   erga"nzt.   Man  spart  Formulierung-
             saufwand, die Abarbeitung  erfolgt  schneller  als  fu"r
             andere ccccooooppppyyyyrrrr-Statements, da Konvertierungen entfallen.

             Ein  ccccooooppppyyyyrrrr  iiiinnnnttttoooo  -Kommando  wird  auf  Relationen  mit
             Indizes nicht unterstu"tzt.

             FFFFiiiilllleeee::::
                UNIX-file-Name, als voller Pfadname oder # fu"r
                Standardinput bei COPY ... FROM "#" bzw.
                Standardoutput bei COPY ... INTO "#".

             FFFFllllaaaaggggssss::::
                -uxx        - alter-ego-Flag fu"r
                              den UNIX-login-Name `xx'
                +-w         - wait-Flag















        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 86 -                    CCCCRRRREEEEAAAATTTTDDDDBBBB


        NNNNAAAAMMMMEEEE

             creatdb - Erzeuge eine Datenbank

        SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS

             ccccrrrreeeeaaaattttddddbbbb [ ffffllllaaaaggggssss ] [ ----eeee ] [ ----mmmm ] [ ++++----cccc ] [ ++++----qqqq ] dbname

        BBBBEEEESSSSCCCCHHHHRRRREEEEIIIIBBBBUUUUNNNNGGGG

             ccccrrrreeeeaaaattttddddbbbb erzeugt eine neue ING_DB  Datenbank oder  modi-
             fiziert  den  Status einer existierenden.  Der das Kom-
             mando verwendende Nutzer wird der  Datenbankadministra-
             tor  (DBA)  fu"r  die  Datenbank.  Der DBA hat spezielle
             Berechtigungen, die den normalen Nutzern  versagt  wer-
             den.   Die  Benutzung des Kommandos setzt die Erlaubnis
             zur Erzeugung von  Datenbanken  (siehe  uuuusssseeeerrrrssss  (files))
             voraus.

             ddddbbbbnnnnaaaammmmeeee ist der Name der zu erzeugenden Datenbank.   Der
             Name  muss einmalig (unique) unter allen Datenbanknamen
             aller ING_DB  6.3/3 Nutzer sein.

             Es gibt jetzt die  Mo"glichkeit,  die  Seitengro"sse  der
             Datenbank    an    das    Betriebssystem    anzupassen.
             Unterstu"tzt werden   Seitengro"ssen  von  512  und  1024
             Bytes.   Durch die Angabe des Flags `-1' werden  512'er
             und durch die  Angabe  es  Flags  `-2'  werden  1024'er
             Datenbanken erzeugt.
             Standard sind 1024'er Datenbanken.
             Beide   Formen  ko"nnen   parallel  in   einem    System
             angelegt  werden, ING_DB 6.3/3  verwaltet diesen Unter-
             schied intern.  512'er ko"nnen nicht in 1024'er   Daten-
             banken   konvertiert  werden,  dazu mu"ssen sie  logisch
             auskopiert  und   wieder   einkopiert   werden   (siehe
             copydb(unix)).

             Das Flag ++++----cccc definiert  die  Gleichzeitigkeitskontrolle
             der  Datenbank.   Die  Form ++++cccc schaltet sie ein (shared
             database = Standardannahme) und ----cccc aus  (private  data-
             base).

             Die Gleichzeitigkeitskontrolle sollte nicht ausgeschal-
             tet  werden,  es  sei denn fu"r Datenbanken, die nie von
             mehr als einem Nutzer benutzt werden.   Sie  muss  auch
             eingeschaltet werden, wenn die Nutzer keine gemeinsamen
             (shared) Datenrelationen haben, da  die  Systemkataloge
             immer    parallel    verwendet    werden!    Wenn   die
             Gleichzeitigkeitskontrolle nicht in  UNIX   installiert
             ist,  das  UNIX  -Spezialfile  ``/dev/ing_lock''  nicht
             existiert oder nicht schreibbar fu"r ING_DB  6.3/3  ist,
             dann  wird die Gleichzeitigkeitskontrolle nicht wirksam
             (als wenn sie ausgeschaltet ist).

             Die Gleichheitskontrolle fu"r eine  existierende  Daten-
             bank  kann durch die Angabe des ----eeee Flags vera"ndert wer-
             den.  Zum Beispiel:






        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 87 -                    CCCCRRRREEEEAAAATTTTDDDDBBBB


                  creatdb -e +c meine_db

             schaltet die Gleichzeitigkeitskontrolle (c: concurrency
             control)  fu"r  die Datenbank ``meine_db'' ein.  Nur der
             DBA der Datenbank darf das ----eeee (existing)  Flag  verwen-
             den.

             Das ----mmmm (mounted) Flag besagt, dass das UNIX   directory
             bereits existiert, in dem die Datenbank angelegt werden
             soll.  Das kann fu"r sehr  grosse  Datenbanken  nu"tzlich
             sein,  die  als  Filesystem  montiert  (mounted) werden
             mu"ssen.  Das directory muss existieren, es  kann  durch
             folgende Kommandofolge angelegt werden:

             Das Anlegen wird an einem Beispiel erkla"rt.

             1) creatdb mount_db
             2) destroydb -m mount_db
             HINWEIS: Jetzt vom  UNIX
             -Superuser einen Datentraeger
                      in  `.../data/base/mount_db' mounten lassen.
             3) creatdb -m [weiter Flags moeglich] mount_db
                In der  Zukunft muss immer darauf  geachtet werden,  dass
                wenn die  Datenbank  mount_db  angesprochen  werden soll,
                auch der Datentra"ger gemountet ist !

             Datenbanken ko"nnen auch ausserhalb des  Systemstandards
             angelegt werden. Dazu ist notwendig:

             (1)  Das entfernte DB-directory anzulegen

             (2)  Die Datenbank mittels ccccrrrreeeeaaaattttddddbbbb erzeugen

             (3)  Die Files der Datenbank aus dem Standard-directory
                  kopieren

             (4)  Die Files  und  das  directory  der  Datenbank  im
                  Standard-directory lo"schen.

             (5)  Das File ../data/base/<dbname> mit dem  Modus  600
                  (Eigentu"mer  ing_db)  erzeugen.  Das File muss den
                  Pfadnamen des entfernten DB-directory  (Einzeiler)
                  enthalten.

             Die  zuku"nftige  Verwendung  bedingt  keine  besonderen
             Angaben  zur  Lage  der Datenbank.  Das ++++----qqqq -Flag dient
             der Ein- bzw. Ausschaltung des  QRYMOD-Komplexes.   Bei
             existierenden Datenbanken kann der QRYMOD-Komplex nicht
             wieder ausgeschaltet werden.
             Fu"r die Verwendung des define(quel)-Statements ist  die
             Generierung des QRYMOD-Komplexes (+q) unerla"sslich.

        BBBBEEEEIIIISSSSPPPPIIIIEEEELLLL

             creatdb demo
             creatdb -uerichs -c erichs_db
             creatdb -e +c erichs_db






        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 88 -                    CCCCRRRREEEEAAAATTTTDDDDBBBB


             Das Erstellen der Datenbank erichs_db auf einem separa-
             ten Datentra"ger:

             -    vom Systemadministrator ausfu"hren lassen:

                       mkdir .../data/base/erichs_db
                       chmod 777 .../data/base/erichs_db


             -    vom UNIX -Superuser ausfu"hren lassen:

                       Montieren des Gera"tes auf das directory
                       .../data/base/erichs_db


             -    selbst ausfu"hren:

                       creatdb -m erichs_db


             Es muss jetzt dafu"r  gesorgt  werden,  dass  vor  jeder
             Verwendung  der Datenbank erichs_db das Filesystem mon-
             tiert werden muss.

             Erstellen der Datenbank erichs_db im entfernten  direc-
             tory /tmp/erich/db

             -    selbst aussfu"hren:

                      mkdir /tmp/erich/db
                      chmod 777 /tmp/erich/db


             -    vom ing_db-Superuser ausfu"hren lassen:

                      creatdb erichs_db
                      mv .../data/base/erichs_db/*  /tmp/erich/db
                      rmdir .../data/base/erichs_db
                      echo /tmp/erich/db > .../data/base/erichs_db
                      chmod 600 .../data/base/erichs_db


        SSSSIIIIEEEEHHHHEEEE AAAAUUUUCCCCHHHH

             destroydb(unix), users(files)


















        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 89 -                    CCCCRRRREEEEAAAATTTTEEEERRRR


        NNNNAAAAMMMMEEEE

             creater - Erzeugen einer neuen Relation

        SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS

             ccccrrrreeeeaaaatttteeeerrrr [ ffffllllaaaaggggssss ] dbname relname {dom format}

        BBBBEEEESSSSCCCCHHHHRRRREEEEIIIIBBBBUUUUNNNNGGGG

             ccccrrrreeeeaaaatttteeeerrrr erzeugt eine neue Relation in der  aufliegenden
             Datenbank.    Die  Relation  wird  dem,  das  Statement
             auslo"senden  Nutzer,   zugeeignet   (dieser   ist   ihr
             "Eigentu"mer")  und  fu"r 7 Tage reserviert.  Wenn dieser
             Nutzer der DBA ist, wird die Relation  zur  allgemeinen
             Benutzung  (shared),  andernfalls  nur  fu"r  den Nutzer
             perso"nlich (private) verfu"gbar.  Der Name der erzeugten
             Relation  ist  <<<<rrrreeeellllnnnnaaaammmmeeee>>>>,,,,  ihre  Doma"nen werden mit den
             aufgefu"hrten <<<<ddddoooommmmnnnnaaaammmmeeee>>>> 's angelegt  und  erhalten  die,
             jeweils fu"r sie spezifizierten Formate (s.  qqqquuuueeeellll:::: <for-
             mat>).

             Die Relation wird als heap  ohne  Daten  initialisiert.
             Fu"r   andere   Nutzer   werden   keine   Zugriffsrechte
             eingetragen.

             Eine Relation kann implementierungsabha"ngig 49 bzw. 128
             Doma"nen  bekommen.   Die  Namen  der  System-Relationen
             (relation, attribute, indexes, tree, protect,  integri-
             ties, references) sind reservierte Relationen-Namen.

             Die vom Anwender  gewa"hlten  Namen  mu"ssen  den  ING_DB
             -Konventionen genu"gen.  Namen du"rfen kleine Buchstaben,
             Ziffern und das Unterstreichungszeichen "_"  enthalten;
             mu"ssen  mit  einem  Buchstaben  oder  "_"  anfangen und
             du"rfen maximal 12 Zeichen lang  sein).   Schlu"sselworte
             von QUEL oder AMX sollten vermieden werden.

             Attributnamen sind lokale Namen innerhalb  einer  Rela-
             tion  und  mu"ssen hier eindeutig sein.  Relationennamen
             werden von ING_DB  mit einem Codenamen des, sie  erzeu-
             genden  Nutzers erga"nzt.  Ein Nutzer greift dadurch bei
             gleichen  Relationennamen  innerhalb  einer   Datenbank
             immer auf "seine" Relation zu.

             Die maximale  Satzla"nge  ist  generierungsabha"ngig  und
             betra"gt 498 bzw. 1010 Bytes.

             FFFFoooorrrrmmmmaaaatttt::::

                 i1, i2, i4 - 1, 2 bzw. 4-Byte-Integer
                 f4, f8     - Gleikommazahl  (einfache, doppelte Genauigkeit)
                 c1 .. c255 - Zeichenkette fester La"nge

             Flags:

                  -uxx       - alter-ego-Flag fu"r
                               den UNIX-login-Name `xx'
                  +-w        - wait-Flag




        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX





        Referenz-Manual            - 90 -                    CCCCRRRREEEEAAAATTTTEEEERRRR


        NNNNAAAAMMMMEEEE

             destroydb - Lo"sche eine existierende Datenbank

        SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS

             ddddeeeessssttttrrrrooooyyyyddddbbbb [ ffffllllaaaaggggssss ] [ ----mmmm ] dbname

        BBBBEEEESSSSCCCCHHHHRRRREEEEIIIIBBBBUUUUNNNNGGGG

             ddddeeeessssttttrrrrooooyyyyddddbbbb lo"scht alle  Bezu"ge  zu  einer  existierenden
             Datenbank.   Das directory der Datenbank und alle Files
             (Relationen) in diesem directory werden gelo"scht.

             Das Kommando kann nur der Datenbankadministrator  (DBA)
             oder  der  ING_DB   Superuser  bei  Angabe des ----ssss Flags
             ausfu"hren.

             Bei entfernt angelegten Datenbanken wird  das  Verweis-
             file  zur Datenbank und das entfernt liegende directory
             gelo"scht.

             Das ----mmmm Flag weist ddddeeeessssttttrrrrooooyyyyddddbbbb an, das UNIX  directory der
             Datenbank  nicht  zu  lo"schen.  Das kann nu"tzlich sein,
             wenn die Daten der Datenbank auf einem separaten  (m  =
             mounted) UNIX -Filesystem sind.

        BBBBEEEEIIIISSSSPPPPIIIIEEEELLLL

             destroydb demo
             destroydb -s erichs_db

        FFFFIIIILLLLEEEESSSS

             .../data/base/*

        SSSSIIIIEEEEHHHHEEEE AAAAUUUUCCCCHHHH

             creatdb(unix)
























        ING_DB 6.3/3           Juni 16, 1989                    UUUUNNNNIIIIXXXX


