[NEWSboard IBMi Forum]

Thema: PF anlegen

  1. #1
    Registriert seit
    Jun 2004
    Beiträge
    46

    PF anlegen

    hallo zusammen,
    ich hab ne Frage..
    Ich möchte eine physische Datei anlegen, die eine variable Feldlänge aber maximal bspw. 1000 Zeichen hat. Unter SQL heißt der Datentyp VARCHAR(länge), Gibt es eine ähnliche Funktion auf der AS400??
    Danke im Voraus!
    Vicky

  2. #2
    Registriert seit
    Jul 2001
    Beiträge
    2.713
    Zitat Zitat von Vicky-B
    Unter SQL heißt der Datentyp VARCHAR(länge), Gibt es eine ähnliche Funktion auf der AS400??
    Vicky
    Hallo Vicky,

    gerüchteweise kann auch die AS/400 SQL verstehen

    Probier mal STRSQL (falls 5722ST1 installiert), alternativ über den Operations Navigator.

    -h

  3. #3
    Registriert seit
    Jun 2004
    Beiträge
    46
    Unsere Maschine spricht sql :-) Aber es ist besser bzw. ist ne Vorgabe, Dateien auf dem herkömlichen Wege zu erstellen!

    Noch jmnd. Tipps???
    Danke!
    Vicky

  4. #4
    Registriert seit
    Aug 2004
    Beiträge
    923

    variable länge

    Zitat Zitat von Vicky-B
    Unsere Maschine spricht sql :-) Aber es ist besser bzw. ist ne Vorgabe, Dateien auf dem herkömlichen Wege zu erstellen!

    Noch jmnd. Tipps???
    Danke!
    Vicky
    wie wärs mit nem blick ins handbuch?
    http://publib.boulder.ibm.com/iserie...6/c4157150.pdf

    k.

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Vicky-B
    Unsere Maschine spricht sql :-) Aber es ist besser bzw. ist ne Vorgabe, Dateien auf dem herkömlichen Wege zu erstellen!

    Noch jmnd. Tipps???
    Danke!
    Vicky
    Warum sollte es besser sein eine Datei mit DDS anstatt mit SQL zu beschreiben?
    Im Gegenteil die Verwendung von SQL-Tabellen gegenüber DDS beschriebenen Dateien bringt sogar Performance-Vorteile, da die Daten-Validierung erst beim Schreiben und nicht wie in DDS-beschriebenen Dateien schon beim Lesen erfolgt!

    Aber es gibt auch im DDS die Möglichkeit Felder mit variabler Länge zu definieren. Das entsprechende Schlüssel-Wort lautet VARLEN. In SQL kann durch die Angabe von ALLOCATE eine bestimmte Länge vordefiniert werden. Ist dies auch im DDS erforderlich, wird die Länge in Klammern bei VARLEN angegeben, also z.B. VARLEN(30). Die Maximal-Länge wird wie bei alphanumerischen Feldern mit fixer Länge angegeben.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Jun 2004
    Beiträge
    46
    Hallo Brigitte,

    ich habs ausprobiert und es sieht folg.massen aus:

    A SZBEMERK 200A VARLEN(200)


    Leider kann ich danach nix mehr schreiben. Weißt du woran es liegen könnte???

    DANKE
    Vicky

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Vicky-B
    Hallo Brigitte,

    ich habs ausprobiert und es sieht folg.massen aus:

    A SZBEMERK 200A VARLEN(200)


    Leider kann ich danach nix mehr schreiben. Weißt du woran es liegen könnte???

    DANKE
    Vicky
    Ich nehme an, dass Du versuchst mit SQL zu schreiben.
    Welchen Fehlercode oder SQL-Status erhälst Du nach dem Insert-Statement?

    Es könnte an der Commitment-Steuerung liegen.
    SQL versucht immer unter Commitment Control zu schreiben oder upzudaten, sofern nichts anderes angegeben wurde.
    Dazu müssen die Dateien (Tabellen) im Journal aufgezeichnet werden. Vermutlich hast Du Deine physische Datei nur umgewandelt und vergessen sie im Journal zu registrieren (STRJRNPF).

    SQL erledigt die Registrierung überigens automatisch, sofern das Journal in der gleichen Bibliothek vorhanden ist.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    VARLEN(200) heisst: Es sind mindesten 200 Zeichen erforderlich !
    Definiere einfach:
    A SZBEMERK 200A VARLEN

    Der Klammerwert hinter VARLEN definiert die Mindestlänge !!!
    A SZBEMERK 200A VARLEN(10) <= mindstens 10 max. 200
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Fuerchau
    VARLEN(200) heisst: Es sind mindesten 200 Zeichen erforderlich !
    Definiere einfach:
    A SZBEMERK 200A VARLEN

    Der Klammerwert hinter VARLEN definiert die Mindestlänge !!!
    A SZBEMERK 200A VARLEN(10) <= mindstens 10 max. 200
    Das ist so nicht korrekt!

    VARLEN(200) heißt, dass in jedem Satz 200 Byte für die Feld-Inhalte reserviert werden, und nicht dass mindestens 200 Zeichen erforderlich sind. In dem Feld können durchaus nur 5 Zeichen stehen.

    Bei VARLEN(10) und einer Maximal-Länge von 200 Byte werden in jedem Datensatz 10 Byte reserviert. Muss ein Text, der länger als 10 Zeichen ist gespeichert werden, wird in dem Original-Feld nur ein Verweis auf eine Adresse in der Overflow- oder Spil-Area hinterlegt, unter der der komplette String dann gespeichert wird. Wir der Datensatz inclusive dieses Feldes eingelesen, muss zunächst die Adresse aufgelöst werden und die Daten aus der Overflow-Area eingelesen werden. Es ist also eine zusätzliche Aktion erforderlich.

    Wird VARLEN ohne Längenangabe definiert, werden alle Daten in der Overflow-Area gespeichert, wenn die Maximal-Länge größer als 30 Bytes ist. Bei VARLEN-Feldern mit einer Maximal-Länge unter 30 Bytes wird DB2 UDB intern immer die Maximal-Länge im Datensatz reserviert.

    Von Performance-Gesichtspunkten aus sollte die reservierte Länge so fest gelegt werden, dass ca. 90-95 % aller Einträge in diese reservierte Länge passen und nur einige Ausreißer in der Overflow-Area gespeichert werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  10. #10
    Registriert seit
    Jun 2004
    Beiträge
    46
    Hallo zusammen,

    ich hab jetzt folgendermassen das Feld definiert:

    A SZBEMERK 200A VARLEN(1)

    wenn man dann mit upddta in die Datei reingeht, wird das Feld mit 200 Zeichen auch angezeigt (ist auch genau so mit runqry *n datei. Wo ist dann der Vorteil bei einer solchen DDS? Ich dachte der Speicher-Platz wird erst dann zur Verfügung gestellt, wenn die Inhaltslänge bekannt ist

    Danke für die Antworten!

    Vicky

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Vicky-B
    Hallo zusammen,

    ich hab jetzt folgendermassen das Feld definiert:

    A SZBEMERK 200A VARLEN(1)

    wenn man dann mit upddta in die Datei reingeht, wird das Feld mit 200 Zeichen auch angezeigt (ist auch genau so mit runqry *n datei. Wo ist dann der Vorteil bei einer solchen DDS? Ich dachte der Speicher-Platz wird erst dann zur Verfügung gestellt, wenn die Inhaltslänge bekannt ist

    Danke für die Antworten!

    Vicky
    Was Du siehst und was intern in der Datenbank passiert sind 2 Paar Stiefel! UPDDTA und interaktives SQL usw. zeigen aufbereitete Versionen des Datensatzes an, d.h. die Daten aus der Overflow-Area sind an der entsprechenden Stelle eingefügt. Wenn Du einen neuen Datensatz anlegen willst, wird also angezeigt, wie viel Platz Du maximal zur Verfügung hast. Der Rest, wo und in welcher Form die Daten abgelegt werden geschieht erst in dem Moment, wenn Du Datenfreigabe drückst.

    Warum man einen bestimmten Bereich reserviert?
    Ganz einfach um Platz zu sparen. (Okay in der heutigen Zeit, in der Platten-Platz "nichts mehr kostet" mag dies vielleicht nicht mehr relevant sein, aber früher!) Angenommen ein alphanumerisches Feld hat eine Maximal-Länge von 32.767 Zeichen und soll irgendwelche Meldungen aufnehmen. Meist handelt es sich dabei im Kurz-Meldungen mit ca. 1024 Zeichen und nur in Ausnahmen wird ein Roman hinterlegt. Warum also in jedem Satz über 30.000 Byte verschwenden?

    Auf der anderen Seite bringen natürlich Zugriffe in die Overflow-Area Performance-Einbußen mit sich.

    Ob und wieviel Speicher im Datensatz reserviert werden sollte, hängt jeweils von der Strategie ab, die verfolgt wird.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  12. #12
    Joe is offline [professional_User]
    Registriert seit
    Mar 2001
    Beiträge
    365
    Hallo.

    s. Performance-Hinweis von Birgitta.

    Gruß

Similar Threads

  1. STRMF nach PF kopieren???
    By K_Tippi in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 24-01-07, 06:37
  2. Bilder (*.JPG, *.BMP) in PF
    By GraueEminenz in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 05-01-07, 11:47
  3. UTF-8 Datei nach PF
    By wrkas400 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 19-12-06, 09:23
  4. PF von hinten nach vorne
    By kuempi von stein in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 07-11-06, 08:33
  5. DDS aus PF
    By KaFi in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 07-10-06, 12:52

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •