Ich möchte den Inhalt einer Excel-Tabelle mit dem Inhalt einer Datenbanktabelle abgleichen.
Ich Lese dafür Zeile für Zeile der externen Datei ein und suche die zutreffende Zeile in der Tabelle.
Ziel ist es anhand von einigen Spalten eine 1 zu 1 Beziehung zu finden.
Das Problem ist das ich keinen ?wirklichen? Schlüssel habe. Außerdem haben sich in der Excel-Tabelle unzählige Rechtschreibfehler eingeschlichen. Eine direkte Suche wird also nix.
Es gibt ein Feld welches immer Identisch sein muss, dies hat allerdings eine n zu m Beziehung.
Nun ist meine Idee, über dieses Feld die Zeichenkettenvergleiche zumindest einzugrenzen.
Ist es besser für diese Sache die komplette Datenbanktabelle erst in eine interne Tabelle zu laden und dann mittels LOOP WHERE die Komponenten zu suchen.
Oder würdet Ihr für jede Zeile der externen Datei einen neuen SELECT starten und dann nur die bestimmten Zeilen in eine interne Tabelle übertragen?
Dann würdest du die Suche in der internen Tabelle der Datenbanktabelle nicht eingrenzen. Damit steigt die Abarbeitungszeit stark an, da alle Zeilen der Tabelle durchsucht werden bis ein Eintrag gefunden wird.
Da kein direkter Vergleich auf Grund von Tippfehlern möglich ist, wird für jedes Feld eine Spezielle Vergleichsroutine durchlaufen.
Wenn ich die interne Tabelle der Datenbanktabelle mittels LOOP und einer WHERE Beziehung auf wenige mögliche Zuordnungen reduziere spar ich doch viel Rechenzeit.
Die Frage ist nur ob ich für jede Zeile der Excel Tabelle einen neuen SELECT WHERE mache oder eben die ganze Datenbanktabelle erst in eine interne Tabelle lade und dann wie oben beschrieben auslese.
Denke die LOOP WHERE Geschichte wird?s werden.
Größe der Datenbanktabelle: ca. 28000 Einträge
Größe der Excel-Datei: ca. 1600 Einträge
Lade doch die Felder der Datenbank, die für diesen Verglecih benötigt werden in eine interne Tabelle (TAB_DB) - sorted Table
Die Exceltabelle auch in eine interne Tabelle gestellt (TAB_EX) und nach den entsprechenden Schlüssel sortiert.
Loop über TAB_EX.
READ table TAB_DB .... Binary search.
endloop.
Somit ist dein Vergleich relativ zügig fertig, das das Bereitstellen deiner DB mittels FETCH läuft ist das recht effekltiv.
Besser als jeden Satz gegen die DB zu prüfen. Bei 28000 Datensätze ist dies auch durchaus vertretbar.