PDA

View Full Version : PF anlegen



Seiten : [1] 2

Vicky-B
04-10-05, 11:38
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

holgerscherer
04-10-05, 11:50
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

Vicky-B
04-10-05, 12:15
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

kuempi von stein
04-10-05, 12:21
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/iseries/v5r2/ic2929/books/sm16/c4157150.pdf

k.

B.Hauser
04-10-05, 12:22
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

Vicky-B
04-10-05, 13:30
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

B.Hauser
04-10-05, 15:17
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

Fuerchau
04-10-05, 17:08
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

B.Hauser
04-10-05, 20:37
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

Vicky-B
05-10-05, 09: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 :confused:

Danke für die Antworten!

Vicky