-
Tabellenabgleich ist sowas möglich?
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
-
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
¬found => write Datei2
-
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 ?
-
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)
-
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
-
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.
Code:
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)
-
Super danke für die Antworten habe jetzt eine Lösung für mich gefunden die passt
-
... wieder mal Sumpf, was gibt es für einen Grund, dass eine Tabelle zweimal existiert, wenn eine davon führend ist???
D*B
-
Vielleicht ne Testumgebung die alle Stunde auf den aktuellen Stand gebracht werden soll.
-
... 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
 Zitat von Pikachu
Vielleicht ne Testumgebung die alle Stunde auf den aktuellen Stand gebracht werden soll.
-
Nunja, und was die Performance angeht wäre ein CPYF mit Replace wohl die schnellste Möglichkeit.
-
... ist doch warm heute, dann dürfte die Tabelle nicht benutzt werden, dann braucht man den CPYF auch nicht!!!
D*B
 Zitat von Fuerchau
Nunja, und was die Performance angeht wäre ein CPYF mit Replace wohl die schnellste Möglichkeit.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks