Anmelden

View Full Version : Tabellenabgleich ist sowas möglich?



Seiten : [1] 2

firestone
16-07-10, 09:40
Hallo zusammen,
ich bin leider kein System i Fachspezialist aber ich habe eine Frage ob sowas technisch möglich ist und vielleicht sogar Lösungsansätze wo ich ansetzen müsste um es zu realisieren wenn es möglich ist .

Also wir haben folgende i Series
OS400 V6R1M0



Zum Problem:
Ich habe eine Bibliothek A und eine Bibliothek B in beiden Bibliotheken habe ich eine Tabelle Names Kunden. Die Tabellen sind vom Aufbau und vom Inhalt her erst mal gleich.

So nun wird die Tabelle in Bibliothek A geändert und die Tabelle in Bibliothek B ebenfalls .

Jetzt würde ich gerne in regelmäßigen Abständen diese beiden Tabellen automatisch miteinander vergleich. Die Tabelle aus Bibl A ist die vorrangige und die Tabelle aus Bibl B soll dann wieder auf den gleichen Stand gebracht werden wie die Tabelle aus Bibl A.

Die Überprüfung soll vorzugsweise in Abständen von einer Stunde laufen und man sollte sie ebenfalls manuell durchführen können .

Ist sowas möglich das wäre ja eine Art Tabellenvergleich mit Anpassung der einen Tabelle an die andere. Es handelt sich um eine Sehr große Tabelle also ist es nicht möglich diese Einmal pro Stunde einfach erneut zu überschreiben. Ich würde gerne nur die Datensätze die sich geändert haben aus der Tabelle aus Bibl A in die Tabelle in Bibls B kopieren.

Danke im vorraus

Lg Fireli

Fuerchau
16-07-10, 09:51
Egal ob du SQL oder eine Programm nimmst, schreiben musst du irgendwas.
Ein Programm ist da schon einfacher, da du hier Datenstrukturen vergleichen kannst, in SQL nur einzelne Felder.

Also im Prinzip folgendes:
Änderungen/Löschungen
lesen Datei1 in Struktur1
Chain Datei2 in Struktur2
%notfound => delete
struktur1 <> struktur2 => move Struktur2 nach Struktur1 und Update

Neu
Lesen Datei2
chain Datei1
&notfound => write Datei2

firestone
16-07-10, 09:57
Danke für die schnelle Antwort.

Also von der Struktur her sind die Tabellen auf jeden Fall zu 100 % gleich nur der Inhalt kann abweichen.

Das Programm müsste folgendes leisten
Neue Sätze einfügen
geänderte Sätze updaten
und Sätze die nicht mehr vorhanden sind löschen

Wäre sowas über SQL Tatsächlich schwerer ?

Fuerchau
16-07-10, 10:14
SQL kennt keine Datenstrukturen, du müsstes also einen Feld-für-Feld-Vergleich kodieren.

Um also SQL-Routinen zu stricken benötigst du 3 verschiedene SQL's mit dem Nachteil, dass du die Daten eben 3 Mal bearbeiten musst.

Im RPG benötigst du nur 2 Läufe, da der Update/Delete in einem Lauf möglich ist, der Insert im 2. Lauf.

Der Insert ist in SQL noch am einfachsten:

insert into dateiA A
select * from DateiB B
where not exists (select * from DateiA C where c.key = B.key)

Der Update wird dann schon schwieriger:

update DateiA A
set a.f1=(select b.f1 from dateiB where a.key = b.key and a.f1 <> b.f1)
,a.f2=(select b.f2 from dateiB where a.key = b.key and a.f2 <> b.f2)
,....
where exists (select * from dateiB b where a.key=b.key)

Wobei dieser SQL ab V5R4 auch etwas vereinfacht werden kann:

Update DateiA A
set (F1, F2, ...) = (select f1, f2, ... from DateiB b where a.key=b.key and (a.f1 <> b.f1 or a.f2 <> b.f2 .....))
where exists (select * from dateiB b where a.key=b.key)

Und zum Schluss der Delete:
delete from dateiA A
where not exists (select * from DateiB B where B.key = a.key)

Robi
16-07-10, 10:29
Alternativ kannst du einer Trigger auf die Datei in der führenden Lib legen und diesen die Datei in der 2. Lib updaten lassen.
Vorteil: top aktuell, keine stündlichen Performanceeinbrüche.
Nachteil: warscheinlich fest verdrahtete Lib's
Gruß
Robi

andreaspr@aon.at
16-07-10, 10:58
Nur als Info falls es wem interessiert:
ab IBM i 7.1 gibt es die Merge-Funktion in SQL.
Mit der kannst du z.B. ein Update/Insert in einer SQL-Anweisung absetzen.


merge into tab1
using tab11
on tab1.sp1 = tab11.sp1
when matched then
update set tab1.sp2 = tab11.sp2
when not matched then
insert (sp1, sp2) values (tab11.sp1, tab11.sp2)

firestone
16-07-10, 11:29
Super danke für die Antworten ;) habe jetzt eine Lösung für mich gefunden die passt :)

BenderD
16-07-10, 13:30
... wieder mal Sumpf, was gibt es für einen Grund, dass eine Tabelle zweimal existiert, wenn eine davon führend ist???

D*B

Pikachu
16-07-10, 13:34
Vielleicht ne Testumgebung die alle Stunde auf den aktuellen Stand gebracht werden soll.

BenderD
16-07-10, 13:44
... zieht auch von unten an den Füssen:
- Echtdaten sind keine Testdaten (Datenschutz, enthalten zuwenig Grenzfälle, gewährleisten keine Testabdeckung)
- Testdaten die nebenläufig überklotzt werden, na toll???

D*B


Vielleicht ne Testumgebung die alle Stunde auf den aktuellen Stand gebracht werden soll.