[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2006
    Beiträge
    27

    Record compare

    Moin zusammen,

    ich habe eine Anforderung drei Sätze miteinander zu vergleichen. Die Tabellen enthalten über 200 Spalten und die Anforderung besteht darin die Spalten zu bekommen, in denen die Felder unterschiedlich sind.
    Optimal wäre eine Konfigurationsmöglichkeit, womit man Spalten selektiv von dem Vergleich ausschließen könnte.
    Alternativ können die Daten natürlich auch in drei Tabellen ausgegeben werden, wobei als Ergebnis in jedem Fall die unterschiedlichen Spalten ausgewiesen werden müssen. Die unterschiedlichen Sätze reicht nicht aus, da die Sätze in jedem Fall unterschiedlich sind.

    Hintergrund ist eine laufende Anwendungsmodernisierung, wobei die Einträge von der alten und der neuen Umgebung geschrieben werden und im Rahmen des Tests Unterschiede aufgedeckt werden müssen, wobei es natürlich Spalten gibt die im neuen System nicht mehr vorhanden sind und somit vom Test ausgeschlossen werden sollten.

    Natürlich kann man das auch im SQL programmieren, aber vielleicht kennt jemand ein Tool, das diese Anforderungen mit sich bringt. Mit dem direkten Zugriff auf das System i sind meine Anforderungen wahrscheinlich zu hoch geschraubt

    Vielen Dank

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ich glaube kaum, dass des da ein fertiges Tool gibt, denn diese Anforderung ist schon sehr spezifisch.
    Die einzige Chance ist hier wirklich SQL, da du mit SQL die Feldvergleiche dynamisch anstellen kannst.
    Irgendwer muss ja zumindest sagen, was mit was verglichen werden soll.
    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

  3. #3
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    Wir schieben die Sätze in eine

    D a_XXSatz E DS extname(XXFILE) prefix (a_)

    und b_

    dann vergleichen wir in Schleife Byte für Byte von a_xxSatz und b_xxsatz.
    Bei ungleich können wir über die pos das Feld bestimmen ->dspffd in eine Outfile, key auf PufferPos
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  4. #4
    Registriert seit
    Mar 2006
    Beiträge
    27
    Vielen Dank erst Mal - vielleicht hat jemand anderes noch eine Idee.

    Der Vergleich soll Spalte für Spalte erfolgen, d.h. in einer Tabelle stehen ja sowieso 3 Sätze mit dem gleichen Aufbau und es werden die drei Werte in Spalte 1 miteinander verglichen, die drei Werte in Spalte 2... usw.
    Bei der Ausgabe in 3 Tabellen habe ich ebenso 3 Tabellen mit dem gleichen Aufbau und es wird die erste Spalte in allen drei Tabellen miteinander vergleichen, die zweite Spalte..., die dritte Spalte... usw.

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... was ist jetzt die Frage? was spricht da gegen if, else, if, das geht in jeder Programmiersprache, mehrwertige Verzweigungen sind da unterschiedlich. Aber programmieren muss man da so oder so!

    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
    Oct 2015
    Beiträge
    109
    Hallo,

    wenn ich das richtig verstanden hab suchst du Felder, die in den Dateien voneinander abweichen.
    So müsste das funktionieren:
    SELECT DBILIB, DBIFIL, DBIFLD
    FROM qadbilfi a
    join (select * from qadbilfi b where dbilib = 'Lib 2' and
    dbifil = 'dat 2'
    ) as b on a.DBIFLD = b.DBIFLD
    where a.dbilib ='lib 1' and a.dbifil = 'dat 1'
    and (a.dbiiln <> b.dbiiln or a.dbiitp <> b.dbiitp or
    a.dbityp <> b.dbityp or a.dbicln <> b.dbicln or
    a.dbiccc <> b.dbiccc or a.dbinln <> b.dbinln or
    a.dbinsc <> b.dbinsc)
    evtl. musst du etwas genauer definieren welche Unterschiede du brauchst.
    Hab hier jetzt Typ, CCSID und Längen genommen.

    Falls es dir auch um den Inhalt geht kannst du die Felder die hier herauskommen ja in Schleife dynamisch in ein Sql setzen lassen und so vergleichen.

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Ich würde die Catalog View SYSCOLUMNS verwenden. (Auf die QADB... Tabellen, hat nicht jeder Zugriff!)

    Für den Abgleich, würde ich die Catalog-View mehrfach über FULL JOINS verknüpfen und dann die Abweichungen über Case-Anweisungen ermitteln (und ggf. filtern) etwa so:

    Code:
    Select Coalesce(a.Table_Schema, b.Table_Schema)  Schema,
           Coalesce(a.Table_Name,   b.Table_Name)    Table,
           Coalesce(a.Column_Name,  b.Column_Name)   Column,
           Case When a.Data_Type <> b.Data_Type Then 'DataType' Else '' End DiffType,
           Case When a.Length    <> b.Length    Then 'Length'   Else '' End DiffLength,
           Case When a.Numeric_Scale is Distinct from b.Numeric_Scale Then 'Numeric Scale' Else '' End DiffNumScale, 
           ....
      From (Select * 
               From SysColumns 
               Where     System_Table_Name   = 'YOUR1TABLE'
                     and System_Table_Schema = 'SCHEMA1') a
            Full Join 
            (Select *
               From SysColumns
               Where     System_Table_Name   = 'YOUR2TABLE'
                     and System_Table_Schema = 'SCHEMA2') b
             on     a.System_Column_Name  = b.System_Column_Name
    Falls die abweichenden Datensätze ermittelt werden sollten, kann dies mit Hilfe der EXCEPT-Klausel erfolgen:
    Code:
    Select Col1, Col2, ... ColN
       From SCHEMA1.YOUR1TABLE
    Except
    Select Col1, Col2, ... ColN
       From SCHEMA2.YOUR2TABLE
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Die QADB... ist Basis für SYSCOLUMNS und ohne Lesezugriff (Default) könnte man auch die SYSCOLUMNS nicht lesen.
    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

Similar Threads

  1. Record 367461 member PARTMASTER already locked to this job.
    By harkne in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 08-12-15, 14:31
  2. COMPARE PF
    By samik in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 12-02-03, 15:22

Berechtigungen

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