Oracle 12.2, Historie von Datensätzen Excel input, xls, start_time, end_time


tplanitz

Erfahrenes Mitglied
Hallo Gemeinde,

folgende Thematik:

  • Eine Menge von Daten (Benutzer) sollen über einen Import (xls) in die Datenbank eingetragen werden.
  • Sind die Benuter nicht bekannt sollen sie in die Tabelle geschrieben werden und einen Start Zeitstempel erhalte.
  • Wenn der Benutzer nicht mehr über den xls import eingelesen wird, er wurde im xls gelöscht, soll in der Datenbank ein ende Zeitstempel gesetzt werden.
  • Der Benutzer kann aber wieder als Input im xls stehen und erneut eingelesen werden mit einem Start Zeitstempel.
Den Import mache ich mit einem ETL Werkzeug. Pentaho PDI

Meine Tabelle sieht so hier aus (oracle 12.2.)

SQL:
create table (
benutzer varchar2(200)
,start_time timmestamp(9) default localtimestamp
,end_time timestamp(9)
)
;
Frage/n: wie kann ich nun das oben beschriebene Szenario erreichen.

Ich überlege mir die Daten aus dem xls file in eine temporäter Tabelle zu schreiben und das mit plsql zu lösen.
Ist das der richtige Ansatz oder geht das auch mit einfachem SQl Mitteln?

Brauche ich einen extra primary key, nur der Benutzer wird ja nicht reichen, er kann ja mehrfach eingetragen werden.?

Habt Ihr eine Idee was die schlankeste Lösung ist?
Danke für Unterstützung und Lösungsansätze

T.
 

tplanitz

Erfahrenes Mitglied
Hallo,
ich strebe nun die folgende Lösung an.

In einer tabelle test_in lese ich die Excellister ein.
Die Zieltabelle test wird dann die Historie enthalten.

Folgendes Merge Statement erzeugt dann die Historie:

SQL:
merge into test dest
using (select name, localtimestamp in_time from test_in) src
on    (src.name = dest.name and dest.end_timestamp is null)
when not matched then
  insert (name,begin_timestamp)
  values (src.name, src.in_time)
;
update test set end_timestamp = localtimestamp
where begin_timestamp < (select localtimestamp from dual)
and  name not in (select name from  test_in)
and end_timestamp is null
Die Tabelle test_in kann ich dann immer "aufräumen" da die Quelldaten aus dem *.xls File ja die zu beobachtende Menge erzeugt.

Gruß an Alle

T.
 

Neue Beiträge