[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.752
    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)
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    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

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    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)

  4. #4
    Registriert seit
    Sep 2008
    Beiträge
    6
    Super danke für die Antworten habe jetzt eine Lösung für mich gefunden die passt

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... wieder mal Sumpf, was gibt es für einen Grund, dass eine Tabelle zweimal existiert, wenn eine davon führend ist???

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Nov 2003
    Beiträge
    2.423
    Vielleicht ne Testumgebung die alle Stunde auf den aktuellen Stand gebracht werden soll.

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... 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 Zitat von Pikachu Beitrag anzeigen
    Vielleicht ne Testumgebung die alle Stunde auf den aktuellen Stand gebracht werden soll.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.752
    Nunja, und was die Performance angeht wäre ein CPYF mit Replace wohl die schnellste Möglichkeit.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... ist doch warm heute, dann dürfte die Tabelle nicht benutzt werden, dann braucht man den CPYF auch nicht!!!

    D*B

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Nunja, und was die Performance angeht wäre ein CPYF mit Replace wohl die schnellste Möglichkeit.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.752
    CPYF würde gehen, wenn die Zieltabelle frei ist. Der erschlägt alles, Update, Insert, Delete.

    Trigger wären am effektivsten, wobei man ggf. ab und an den CPYF benötigte.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  11. #11
    Registriert seit
    Apr 2005
    Beiträge
    104
    Wenn die Datei A journalisiert wird, könnte man das Journal auch stündlich auslesen, und die Änderungen auf der Datei B fortschreiben. Ich denke, das wäre wesentlich einfacher selber zu programmieren als ein Trigger, sicherer, und höchst effizient (besser als SQL-Vergleiche bei riesigen Dateien und gerade bei relativ wenigen Differenzen pro Stunde)

    Manche AS400-Awender benutzen das Journal ja sogar für das Fortschreiben einer auf entfernte Systeme verteilten Datenbank, oder für die Führung von Spiegeln.

    Man kann die universelle Lösung auch kaufen (z.B. Data Mirror), aber wenn es nur eine Datei ist, würde ich es glatt selbst programmieren.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •