PDA

View Full Version : Pest oder Cholera



Seiten : [1] 2

KingofKning
17-12-14, 18:00
Hallo *all,
es ist wie immer, ich muß eine Datei bearbeiten in der Datensätze mit einem Gültig bis Datum sind.
Wenn ich eine View erstelle, komme ich schnell an die Daten, aber soweit ich weiß kann ich ja nicht die Reihenfolge der Sätze beeinflußen. Da ich dort Kunden-Nummern drin habe, müßte ich immer die komplette Datei lesen um sicher zu sein alle Sätze eines Kunden zu haben.

Mache ich eine LF kann ich sie schlüsseln und den Satzgruppenwechsel berücksichtigen.

Allein, ich weiß nicht wie ich dieses Konstrukt aus der View in ein LF übersetzen soll.

and (sodnbi = 99999999
or sodnbi >= YEAR(CURRENT DATE)*10000 +
MONTH(CURRENT DATE)*100 +
DAY(CURRENT DATE))

Könnte ich eigentlich eine LF auf die View machen? Nachdem ich nochmal nachgedacht habe, fällt mir ein das eine LF immer nur von einer PF gemacht werden kann.

GG

B.Hauser
17-12-14, 18:45
Wenn Du die View mit embedded SQL verarbeitest, kannst Du eine ORDER BY-Anweisung in dem DECLARE-CURSOR-Statement angeben und damit die Datensätze in der gewünschten Reihenfolge verarbeiten.
... oder bestehst Du darauf die Daten mit native I/O zu verarbeiten?

Übrigens SODNBI = 99999999 ist überflüssig, da 99999999 auf alle Fälle größer als das numerische Datum ist.

Auf alle Fälle sollte ein Index mit SODNBI als Schlüssel-Feld haben oder vielleicht besser KUNDE/SODNDBI vorhanden sein.

Falls Du zufällig schon auf Release 7.2 sein solltest kannst Du das numerische Datum im Format JJJJMMTT mit DEC(Current_Date, 8, 0) oder INT(Current_Date) ermitteln.

Birgitta

KingofKning
17-12-14, 19:40
Danke,
ich muss darüber nachdenken, will die Daten eigentlich mit Cobol weiterverarbeiten.

Melde mich morgen wieder.

PS immer noch V5R4

B.Hauser
17-12-14, 20:48
will die Daten eigentlich mit Cobol weiterverarbeiten.

Das ist doch kein Problem, Du liest die Daten mit (embedded) SQL in eine Datenstruktur oder einzelne Host-Variablen und verarbeitest die Werte weiter mit Cobol.

Birgitta

Robi
18-12-14, 07:39
ggf hab ich das Problem noch nicht verstanden, wenn doch, dann mach ein Index
mit Kundennr (aufsteigend) und g.ab.Datum absteigend auf die View, das geht.
(Datum als Datum oder numerisch JJJJMMTT)
Beim Zugriff mit 'Kunde und Datum' (setll und read) hast du immer den zu Zeitpunkt Datum gültigen Satz.
Robi

KingofKning
18-12-14, 07:50
Hallo,
die Original-Datei hat über 300.000 Datensätze. Mich interessieren aber nur die Datensätze die Gültigkeitsdatum >= dem Tagesdatum bzw. den Wert 99999999 (immer gültig) haben.
Aufbau:

Kunden-Nummer Artikel-Nummer Preis Datum
1081_________ 123 __________0,70 14.12.2014
1081_________ 124__________ 0,99 15.12.2014
1081_________ 124__________ 1,05 10.12.2014

Mit der View habe ich halt den Vorteil immer nur aktuelle Sätze zu haben, mit der LF kann ich zwar auf den Kunden positionieren. Muß mir aber merken welchen Artikel ich gerade hatte und alle Datensätze die vom selben Artikel aber jüngeren Datums sind überlesen.

Da finde ich die View einfach schöner.

Mit embedded SQL in Cobol muß ich mal schauen. Ganz bestimmt eine tolle Sache wenn es mal läuft, aber bis dahin gibt es doch den ein oder anderen Stolperstein....

GG

Robi
18-12-14, 08:00
Ok, verstanden,
Dann zu deiner ursprünglichen Frage:
Ja, du kannst einen Index auf die View legen oder die View im SQL mit order by lesen --> Birgitta's Antwort
SQL verwendet dann alles an LF/INdex was er gebrauchen kann oder sortiert selber.

(meine Cobol Zeit ist gefühlte 100 Jahre her, aber ich denke einen Index kannst du auch im Cobol 'native' verarbeiten)
Robi

BenderD
18-12-14, 08:14
Hallo,
die Original-Datei hat über 300.000 Datensätze. Mich interessieren aber nur die Datensätze die Gültigkeitsdatum >= dem Tagesdatum bzw. den Wert 99999999 (immer gültig) haben.
Aufbau:

Kunden-Nummer Artikel-Nummer Preis Datum
1081_________ 123 __________0,70 14.12.2014
1081_________ 124__________ 0,99 15.12.2014
1081_________ 124__________ 1,05 10.12.2014

Mit der View habe ich halt den Vorteil immer nur aktuelle Sätze zu haben, mit der LF kann ich zwar auf den Kunden positionieren. Muß mir aber merken welchen Artikel ich gerade hatte und alle Datensätze die vom selben Artikel aber jüngeren Datums sind überlesen.

Da finde ich die View einfach schöner.

Mit embedded SQL in Cobol muß ich mal schauen. Ganz bestimmt eine tolle Sache wenn es mal läuft, aber bis dahin gibt es doch den ein oder anderen Stolperstein....

GG

... selbst das geht mit einer DDS LF, Denormalisierung ist das Zauberwort; Du brauchst doch nur eine Datei mit einem Satz, wo Du um 0:00 Uhr das aktuelle Datum reinschreibst.

D*B

Fuerchau
18-12-14, 08:50
Wenn du kein embedded SQL verwenden willst (oder kannst) hast du diesbezüglich tatsächlich ein Problem.
Per DDS kannst du zwar eine LF sortiert nach Datum definieren, aber wenn du per Gruppenwechsel-Logik nach Kunde/Artikel arbeiten musst, kannst du dies nicht per simpler LF definieren.

Hier bieten sich 2 Möglichkeiten an:
1. Gib die View mit z.B. einen QMQRY in eine temporäre Tabelle mit Index nach Kunde/Artikel aus.
2. Verwende die COBOL-Anweisung SORT, gib als Input die Datei und als Output eine Prozedur an.

cbe
18-12-14, 15:53
oder ein OPNQRYF direkt vor dem Aufruf?
Frag mich aber nicht nach Details, das habe ich zum letzten Mal vor gut 15 Jahren mal gemacht - würde aber zu Deinem OS400-Release passen ;)

Gruß, Christian