INSERT in neue tbl nach Vergleich

Rambo21

Aktiver Benutzer
Beiträge
37
Hallo Leute,

Ich habe eine Tabelle "Konto" wo ich meine Kontodaten einspiele:
Id(PK), Konto, Name, KntCreationDate, KntClosingDate,DataCreation
5 , 123456 , XYZ , 01.05.2015 , NULL , 05.07.2016 07:45:00

in der weiteren Tabelle "TypeIndication" möchte ich nun festlegen, ob das Konto aus Tbl "Konto" der erste Eintrag in der Tabelle ist oder eine Änderung. Im jetzigen Fall ein Ersteintrag:
Id(PK), KontoId(FK), Indication
1, 5, E E steht für Ersteintrag

Wenn ich in weiterer Folge das Konto 123456 in die Tbl "Konto" nochmal anlege, zB. mit KntClosingDate:
Id(PK), Konto, Name, KntCreationDate, KntClosingDate,DataCreation
5 , 123456 , XYZ , 01.05.2015 , NULL , 05.07.2016 07:45:00
6 , 123456 , XYZ , 01.05.2015 , 10.05.2016 , 05.07.2016 07:50:00

Soll mir in der Tbl "TypeIndication" folgendes eingetragen werden:
Id(PK), KontoId(FK), Indication
1 , 5 , E
2 , 6 , A A steht für Änderung

Wie sieht nun mein INSERT Statement nun aus? Ich bin zu blöd um dahinter zu kommen.

Danke für eure Unterstützung.

LG
 
Werbung:
Warum trägst das da nochmal ein, warum änderst nicht einfach das Feld? Wenn Du das loggen willst, wann was geändert wurde, dann kannst das via TRIGGER machen. Passende Beispiele könnte ich Dir zeigen - für PostgreSQL.
 
Ich muss in einem Report zeigen, ob der Eintrag ein E oder ein A ist. Bei einem Eintrag kann sich auch zB. der Name ändern. Da muss ich den alten Namen auch ausgeben. Muss dann ich im Report, wo die Änderung angezeigt wird, dann folgendes zeigen:
Indication: A
Konto: 123456
Name: ABC
Alter Name: XYZ
etc...
 
ja, ok. Wie gesagt: ich würde einen TRIGGER nehmen, der das passend in eine Logtabelle wegloggt. Im Trigger kannst ja schon prüfen, was sind ändert, und das schon passend dann loggen.
 
Werbung:
mal ganz quick&dirty:

zuerst Tabellen und TRIGGER:

Code:
privat=# create table foo(id int primary key, name text, val int);
CREATE TABLE
privat=*# create table foo_log(log_id serial primary key, id int, ts timestamp default now(), who text default current_user, info text);CREATE TABLE
privat=*# create or replace function foo_log() returns trigger as $$begin if TG_OP = 'UPDATE' then insert into foo_log(id, info) values (new.id, TG_OP || ' OLD: ' || old.name || ', ' || old.val || ' NEW: ' || new.name || ', ' || new.val); else insert into foo_log(id, info) values (new.id, TG_OP || ' NEW: ' || new.name || ', ' || new.val); end if; return NEW; end; $$language plpgsql;
CREATE FUNCTION
privat=*# create trigger trg_log before insert or update on foo for each row execute procedure foo_log();
CREATE TRIGGER
privat=*# commit;
COMMIT
privat=#

Nun ein Insert und ein Update:

Code:
privat=# insert into foo values (1, 'test 1', 1);
INSERT 0 1
privat=*# commit;
COMMIT
privat=# update foo set name = 'test update' where id = 1;
UPDATE 1
privat=*# commit;
COMMIT
privat=# select * from foo;
 id |  name  | val
----+-------------+-----
  1 | test update |  1
(1 Zeile)

privat=*# select * from foo_log;
 log_id | id |  ts  |  who  |  info   
--------+----+----------------------------+-------------+-------------------------------------------
  1 |  1 | 2016-07-05 10:43:54.711255 | akretschmer | INSERT NEW: test 1, 1
  2 |  1 | 2016-07-05 10:44:04.199612 | akretschmer | UPDATE OLD: test 1, 1 NEW: test update, 1
(2 Zeilen)
 
Zurück
Oben