     COPY(QL)                     DABA16                      COPY(QL)

     NAME
          copy - Kopieren von Daten zwischen Relation und MUTOS-File

     UEBERSICHT
          copy relname (domname = format {, domname = format })

                    direction "filename"

     BESCHREIBUNG
          Copy uebertraegt Daten zwischen  DABA-Relationen  und  einem
          Standard-MUTOS-File.  Relname ist der Name einer bestehenden
          Relation.  Im allgemeinen identifiziert domname eine Domaene
          in der Relation relname.  Format bestimmt das Format, das im
          MUTOS-File eine Domaene besitzen soll, die mit der  spezifi-
          zierten  Domaene  der  Relation  korrespondiert.   Direction
          (Richtung) kann entweder into (in)  oder  from  (aus)  sein.
          Filename ist der vollstaendige Pfadname eines Files.


          Bei einem copy aus (from) einem File in eine  Relation  darf
          die  Relation  keinen Sekundaerindex besitzen, muss dem copy
          Nutzer zugeeignet sein  und  Aenderungsoperationen  zulassen
          (darf kein Sekundaerindex und keine Systemrelation sein).

          Copy darf nicht auf eine virtuelle  Relation  (Sicht,  view)
          angewendet  werden.   Fuer ein copy in (into) ein MUTOS-File
          muss der Nutzer entweder Relationseigentuemer sein, bzw. die
          Relation  muss  retrieve Befugnis fuer alle Nutzer oder alle
          Befugnisse fuer alle Nutzer haben.


          Erlaubte Formate bei copy sind :

          i1,i2,i4 - Der Datenwert im MUTOS-File ist als Festkommazahl
               (Integer) der Laenge 1, 2 oder 4 Byte gespeichert.

          f4,f8 - Der Datenwert im MUTOS-File ist eine  Gleitkommazahl
               (entweder einfacher oder doppelter Genauigkeit).

          c1,c2,...,c255 - Der Datenwert ist als Zeichenkette (String)
               fester Laenge gespeichert.

          c0  -  Zeichenkette   variabler   Laenge   (begrenzt   durch
               Begrenzerzeichen).




          d0,d1,...,d255 - Pseudo(Dummy)-Domaene


          Korrespondierende Domaenen der Relation und  des  MUTOS-File
          muessen  nicht  von  gleicher  Laenge  oder von gleichem Typ
          sein.  Copy wird, soweit notwendig, Konvertierungen ausfueh-
          ren.   Bei  der Konvertierung, mit Ausnahme von Character in
          Character, prueft copy auf Ueberlauf.  Bei der Konvertierung
          Character  in Character wird copy , entsprechende Notwendig-
          keit vorausgesetzt,  entweder  mit  Blanks  auffuellen  oder
          rechtsbuendig verkuerzen.

          Die Domaenen muessen entsprechend der Reihenfolge im  MUTOS-
          File  spezifiziert  werden.  Die Zuornung zu den Domaenen in
          der Relation erfolgt durch Namenszuordnung.

          Copy ist auch nutzbar fuer variabel lange Zeichenketten  und
          Pseudodomaenen  im  MUTOS-File.  Die ausgefuehrte Aktion ist
          von der Uebertragungsrichtung entweder copy into  oder  copy
          from abhaengig.  Begrenzer fuer variabel lange Zeichenketten
          und fuer Pseudodomaenen koennen aus folgender  Liste  ausge-
          waehlt werden :

              nl - Newline-Zeichen
              tab - Tabulatorzeichen
              sp - Space (Blank)-Zeichen
              nul oder null - Nullzeichen "
              comma - Komma
              colon - Doppelpunkt
              dash - Bindestrich
              lparen - linke runde Klammer
              rparen - rechte runde Klammer
              x -bliebiges Einzelzeichen 'x'

          Die Spezialbedeutung eines Begrenzers kann durch den  unmit-
          telbar vorangestellten Backslash "\" aufgehoben werden.  Die
          Typspezifikation kann in Anfuehrungszeichen (z.B. "c0delim")
          eingeschlossen  werden.   Dies  ist bei der Verwendung eines
          Zeichens (delim) als Begrenzer bedeutungsvoll, das fuer  den
          DABA-Parser  (Anweisungsanalyse  fuer  QL-Anweisungen)  eine
          Sonderbedeutung besitzt.

          Bei einer Richtung (direction) aus (from)  einem  MUTOS-File
          fuegt  copy  Daten  an  die Relation an.  Domaenen der DABA-
          Relation, denen aus dem MUTOS-File  keine  Werte  zugewiesen
          werden,  erhalten  einen  Standardwert (Null fuer numerische
          Domaenen und Leerkette fuer Character-Domaenen).  Beim   Ko-
          pieren aus einem File sind folgende Spezialitaeten aufrufbar
          :

          c0delim - Der Datenwert im MUTOS-File ist als variabel lange
               Zeichenkette gespeichert, die durch den Begrenzer delim
               begrenzt wird.  Wenn delim im File vermisst  wird,  be-
               grenzt  das  erste  auftretende Komma, Tab-Zeichen oder
               Newline-Zeichen die Zeichenkette.  Der  Begrenzer  wird
               nicht kopiert.

               Beispiele :
                    tnum=c0 -Zeichenkette endet mit Komma,  Tab-  oder
                    Newline-Zeichen.
                    tnum=c0nl -Zeichenkette endet mit Newline.
                    tnum=c0sp - Zeichenkette endet mit Space.
                    tnum="c0z" - Zeichenkette endet mit Zeichen 'z'.
                    tnum="c0%" - Zeichenkette endet mit Zeichen '%'.

               Ein Begrenzer kann in den Daten des Files  durch  einen
               vorgestellten  Backslash  "\"  aufgehoben  werden.  Zum
               Beispiel wird durch name  =  c0,  in  der  Zeichenkette
               "Mueller\,  Josef"  des  Files  die Sonderbedeutung des
               Kommas als Begrenzer durch den Backslash aufgehoben und
               als "Mueller, Josef" in die Domaene aufgenommen.




          d0delim - Der Datenwert im MUTOS-File ist als variabel lange
               Zeichenkette,  durch  delim begrenzt, gespeichert.  Die
               Zeichenkette wird gelesen aber  nicht  weiter  benutzt.
               Die  Regeln fuer Begrenzer sind mit denen von c0 und d0
               identisch.  Der Domaenenname wird ignoriert.

          d1,d2,...,d255 - Der Datenwert im MUTOS-File ist  eine  Zei-
               chenkette  fester  Laenge.  Sie wird gelesen aber nicht
               weiter benutzt.  Der Domaenenname wird ignoriert.

          Bei einer Richtung into uebertraegt copy Daten aus der Rela-
          tion  in  (into) das MUTOS-File.  Wenn das File bereits exi-
          stiert, wird es vor dem Beginn des Kopierens auf eine  File-
          laenge  Null  verkuerzt.   Beim  Kopieren in dieser Richtung
          sind folgende Spezialitaeten aufrufbar :

          c0 - Der Domaenenwert wird in eine Zeichenkette  fester  La-
               enge  konvertiert  und  in  das MUTOS-File gespeichert.
               Fuer Zeichenketten-Domaenen entspricht die  Laenge  der
               Domaenenlaenge.   Fuer  numerische  Domaenen  wird  die
               Standard-Konvertierung ausgefuehrt, die durch die Flags
               "-i",  "-f", und "-c" beim DABA-Start (iql(mutos)) spe-
               zifiziert wurde.


          c0delim - Die  Domaene  wird  entsprechend  den  Regeln  von
               c0 konvertiert.  Das  einzelne  Begrenzerzeichen  delim
               wird unmittelbar nach der Domaene eingefuegt.

          d1,d2,...,d255 - Der Domaenenname wird als Name des  Begren-
               zers  verwendet.  Dieser Begrenzer wird einmal bei d1 ,
               zweimal bei d2, usw.  in das MUTOS-File geschrieben.

          d0 - Dieses Format wird bei einem copy into ignoriert.

          d0delim - Der Begrenzer delim wird in das File  geschrieben.
               Der Domaenenname wird ignoriert.


          Wenn in der copy Anweisung keine Domaenen spezifiziert sind,
          (z.B.  copy relname () into/from "filename") fuehrt copy au-
          tomatisch eine Gesamtkopie, d.h. eine Kopie  aller  Domaenen
          unter  Beruecksichtigung  der Reihenfolge und der Formate in
          der Relation, aus.  Damit sind  kurze  Notationen  fuer  das
          Entladen und Rueckladen vollstaendiger Relationen moeglich.

          Um ein copy in eine Relation auszufuehren, muss  der  Nutzer
          Relationseigentuemer  sein oder alle Nutzer muessen alle Be-
          fugnisse besitzen ( keine Bufugniseinschraenkungen fuer  die
          Relation).   Ebenso  muss  bei einem copy aus einer Relation
          der Anwender Relationseigentuemer sein oder  wenigstens  re-
          trieve  Befugnis  besitzen.   Ein copy auf eine Sicht (view)
          ist unstatthaft.


     BEISPIEL[E]
          /* Kopieren von Daten in die Relation "personal"*/
             copy personal (name=c20,gehalt=f4,gebdat=i2,xxx=d1)
                        from "/mnt/peter/pers1"

          /* Kopieren der Namen und Gehaelter in ein File*/
             copy personal (name=c0,comma=d1,gehalt=c0,nl=d1)
                          into "/mnt/klaus/gehalt"

          /* Gesamtkopie der Relation "personal" in ein File*/
             copy personal ()
                          into "/mnt/kop/personal"

          /* Rueckspeichern der Gesamtkopie aus einem File*/
             copy personal ()
                          from "/mnt/kop/personal"




     SIEHE AUCH
           append(ql), create(ql), creater(mutos), integrity(ql),
           permit(ql), ql(iql), view(ql), iql(mutos)


     FEHLERQUELLEN
          Copy stoppt die Verarbeitung beim ersten Fehler.

          Bei der Spezifikation filename muss der vollstaendige  Pfad-
          name  angegeben werden, da DABA nach dem Aufruf in einem an-
          deren Directory als dem  momentanen  Arbeits-Directory  ope-
          riert.
