Anmelden

View Full Version : DDS COMP



Seiten : [1] 2

harkne
23-06-15, 15:19
Hallo zusammen,

ich bekomme es leider nicht mehr hin.

Ich habe eine Datei in der befinden sich drei Mengenfelder

Generell möchte ich mir eine logische Datei erstellen in der sich nur noch Sätze befinden wenn Menge1 - Menge2 -Menge3 gleich 0 ist.

Jetzt dachte ich mir ich könnte ein S Menge1 COMP(GT Menge2+Menge3) machen. Aber das mag er nicht.

Wird mir wohl nichts anderes übrig bleiben als ein Feld in der logischen zu definieren deren Wert Menge1-Menge2-Menge3 ist. Geht sowas. Wenn ja wie ? Oder gibt es andere Möglichkeiten ?

Dateierweiterung (PF) nicht möglich bzw. nicht gewollt.

Da die Datenmenge nicht unerheblich ist möchte ich mir die Datenmenge nicht per SQL dynamisch aufbauen.

Danke für die Hilfe im Voraus

Viele Grüße Harkne

Robi
23-06-15, 16:52
Hallo Harkne,
erstell dir ne View, die frisst kein Brot.


Da die Datenmenge nicht unerheblich ist möchte ich mir die Datenmenge nicht per SQL dynamisch aufbauen

Die View selektiert quasi zur Laufzeit. Nur rasend schnell.
Du kannst mit sql lesen, deine LF werden (meistens) vom System automatisch verwendet

Robi

Fuerchau
23-06-15, 17:07
Je nach Datenvolumen ist die Abfrage "a + b + c <> 0" nicht so schnell, da normalerweise kein Index vorhanden ist.
Man muss da schon einen "calculated" Index erstellen und die SQL-Abfrage dann genau so gestalten.

Native ohne SQL ist das leider ohne eine Dateiänderung nicht möglich.
DDS lässt keine Berechnung (nur CAT und SST) zu.

Eine View ist native quasi nur als InputPrimary zu verarbeiten da sie
- keine Sortierung
- keine Schlüssel
enthält.

harkne
23-06-15, 17:52
Hallo Harkne,
erstell dir ne View, die frisst kein Brot.



Die View selektiert quasi zur Laufzeit. Nur rasend schnell.
Du kannst mit sql lesen, deine LF werden (meistens) vom System automatisch verwendet

Robi

Ja würde ich sehr gerne machen, ist vom Kunden nur nicht gewünscht. Trotzdem Danke.

harkne
23-06-15, 17:54
Ich habe gerade erfahren dass es einen Status gibt der die Datenmenge erheblich eingrenzt. Den Rest werde ich dann so durch lesen.
Vielen Dank für die Hilfe

B.Hauser
24-06-15, 13:12
Ich weiß jetzt nich in wieweit der Kunde SQL Indices aktzeptiert, aber es wäre durchaus möglich einen SQL Index mit den entsprechenden Selektionen zu erstellen.


CREATE INDEX YourSchema/YourIndex
ON YourSchema/YourTable (KeyFld01, KeyFld02 ... KeyFld0N)
WHERE (Menge1 - Menge2 - Menge3) = 0
RCDFMT YourRcdFmt ADD ALL COLUMNS;

Das schöne ist an SQL Indices, sie können wie ganz normale geschlüsselte logische Dateien mit native I/O verarbeitet werden. Das ist übrigens nichts neues, SQL Indices konnten schon in den 4er Releasen mit Native I/O verarbeitet werden.
Die Erweiterungen, dass neue Spalten generiert werden können und Where-Bedingungen hinzugefügt werden können, gibt es seit Release 6.1. Und in Release 6.1 war die Erweiterung in erster Linie für native I/O gemacht. Erst ab 7.1 und später kann SQL selber nach und nach solche Indices richtig verwenden.
Da SQL in bei der Erstellung von Indices verwendet werden kann, sind sie um einiges mächtiger als DDS beschriebene logische Dateien.

Birgitta

harkne
24-06-15, 13:43
Hallo Birgitta,

danke für die Antwort, aber leider müssen wir die Dateien sowohl PF als auch LF über DDS erstellen. Die ganze Problematik hat sich aber jetzt sowieso erledigt, da ich nach Absprache ein Flag einfügen kann auf das ich dann meinen COMP mache.

Vielen Dank für die Hilfe

B.Hauser
24-06-15, 15:32
Vielleicht solltest Du mal Deinen Kunden oder Chef dezent darauf hinweisen, dass DDS "stabilized" ist, und das bereits seit Release V5R3 (da gab es die letzte Änderung).
Alle neuen Änderungen nur in SQL erfolgen, auch die die "Erweiterung" des DDS betreffen. Release 6.1 war sogar ein Release, in dem man sich in erster Linie um Erweiterungen in SQL für naitve I/O gekümmert hab.

Empfehlung der IBM ist es alle neuen Datenbankenobjekte nur mit SQL zu erstellen und die vorhandenen peu à peu zu konvertieren.

Leider tragen solche "hartgesottenen Ignoranten" auch maßgeblich dazu bei, dass die IBM i den Ruf als veraltet und überholt hat, obwohl sie eigentlich die modernste Maschine ist. Man schmeißt im Endeffekt lieber die ganze Maschine mit allem drum und dran raus zugunsten einer Umgebung, in der DDS und native I/O eh' keine Rolle mehr spielen, als die vorhandenen Möglichkeiten zu nutzen.

Birgitta

harkne
24-06-15, 20:06
Eine Frage dazu.

Habe ich die möglichkeit das SQL-Statement irgendwo abzulegen so wie die DDS um es immer wieder neu erstellen zu können ?
Oder vielleicht anders. Ich denke mal das Hauptproblem ist, das es für alles eine Quelle gibt und bisher war es auch für die Dateien so. Wie wird das bei Euch gehandhabt. Kann man irgendwo das SQL-Statement als Quelle ablegen und dann auch mit einer Auswahl im PDM erzeugen ?
Ich habe bisher nur mit STRSQL und embedded SQL im RPG gearbeitet.

Viele Grüße Harkne


Vielleicht solltest Du mal Deinen Kunden oder Chef dezent darauf hinweisen, dass DDS "stabilized" ist, und das bereits seit Release V5R3 (da gab es die letzte Änderung).
Alle neuen Änderungen nur in SQL erfolgen, auch die die "Erweiterung" des DDS betreffen. Release 6.1 war sogar ein Release, in dem man sich in erster Linie um Erweiterungen in SQL für naitve I/O gekümmert hab.

Empfehlung der IBM ist es alle neuen Datenbankenobjekte nur mit SQL zu erstellen und die vorhandenen peu à peu zu konvertieren.

Leider tragen solche "hartgesottenen Ignoranten" auch maßgeblich dazu bei, dass die IBM i den Ruf als veraltet und überholt hat, obwohl sie eigentlich die modernste Maschine ist. Man schmeißt im Endeffekt lieber die ganze Maschine mit allem drum und dran raus zugunsten einer Umgebung, in der DDS und native I/O eh' keine Rolle mehr spielen, als die vorhandenen Möglichkeiten zu nutzen.

Birgitta

B.Hauser
25-06-15, 06:49
Habe ich die möglichkeit das SQL-Statement irgendwo abzulegen so wie die DDS um es immer wieder neu erstellen zu können ?
Natürlich!
Du kannst SQL Scripte entweder im IFS oder als Source Physiscal File Member ablegen.
Mit RUNSQLSTM kannst Du diese Scripte jederzeit wieder ausführen.

Wir legen die Erstellungsbefehle für Datenbankenobjekte (wie DDS) als Teildateien ab (auch alte Schule!). Ich habe z.B. bei uns im PDM den RUNSQLSTM-Befehl hinterlegt. Anstatt jetzt ein Datenbanken-Objekt mit 14 zu erstellen wird die Auswahl RS verwendet.

Wenn man im RUNSQLSTM in der Option DFTRDBCOL die Objekt-Bibliothek mitgibt, kann man sogar die Qualifizierung mit der Bibliothek in den Skripten weglassen. Über das gleiche Skript könnte somit das Objekt in unterschiedlichen Schemata/Bibliotheken (Test/Echt) erstellt werden.

Die andere Alternative ist, die Teildatei mit dem IBM i Navigator - Run an SQL Script/Eine SQL Prozedur ausführen öffnen und anschließend ausführen.

Die SQL Skritpe können aus dem Datenbanken-Objekt über den IBM i Navigator generiert und wahlweise im IFS oder als Teildatei gespeichert werden.

Mit einem der letzten Technology Refreshes wurde auch die Stored Procedure GENERATE_SQL in der Bibliothek QSYS2 bereitgestellt, über die die SQL Skripte ebenfalls generiert und wahlweise ins IFS oder als Teildatei abgelegt werden können.

Noch ein Tip: STRSQL ist genaus "stabilized" wie DDS.
Aktuell ist das Strategische Produkt der IBM der IBM i Navigator (Client Access und Teile sind auch in der Web-Version realisiert).
IBM Data Studio wäre u.U. eine Alternative.
Man sollte sich langsam mit diesen Tools anfreunden.


Birgitta