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.