Hi,
wir haben eine alte Anwendung, auf die wir nur via Trigger Möglichkeiten zur Manipulation haben. Also stored proc's scheiden aus!
Ich möchte im Falle eines falschen updates, den ursprünglichen Zustand wiederherstellen.
Ein falscher update ist daran erkennbar, dass der Wert eines Feldes nicht verändert werden darf. Wird dieser verändert, müssen (bis auf den prim-key) alle Felder wieder mit dem alten Wert versehen werden.
1) Ansatz: ein before update trigger
Hier bin ich dran gescheitert, dass oralce nicht erlaubt die durch das update zu veränderte Zeile zu lesen, um an die alten Werte heranzukommen:
select alteWerte from Tabelle where id = :new.id
2) Ansatz: ein after update trigger
Jetzt habe ich zwar die new und old Werte aber oracle erlaubt mein update nicht falls ld.WertFeld != :new.WertFeld.
update Tabelle set :new.WertFeld = ld.WertFeld where id = :new.id (smiley ist hier OLD)
Ansatz 1) würde funktionieren, wenn ich diese besagte Tabelle duplizieren würde und mit dem select in der Kopie die alten Daten holen würde.
Gibt es eine elegante Möglichkeit ohne die Tabelle zu duplizieren?
Danke für Eure Ideen!
Ciao samba
wir haben eine alte Anwendung, auf die wir nur via Trigger Möglichkeiten zur Manipulation haben. Also stored proc's scheiden aus!
Ich möchte im Falle eines falschen updates, den ursprünglichen Zustand wiederherstellen.
Ein falscher update ist daran erkennbar, dass der Wert eines Feldes nicht verändert werden darf. Wird dieser verändert, müssen (bis auf den prim-key) alle Felder wieder mit dem alten Wert versehen werden.
1) Ansatz: ein before update trigger
Hier bin ich dran gescheitert, dass oralce nicht erlaubt die durch das update zu veränderte Zeile zu lesen, um an die alten Werte heranzukommen:
select alteWerte from Tabelle where id = :new.id
2) Ansatz: ein after update trigger
Jetzt habe ich zwar die new und old Werte aber oracle erlaubt mein update nicht falls ld.WertFeld != :new.WertFeld.
update Tabelle set :new.WertFeld = ld.WertFeld where id = :new.id (smiley ist hier OLD)
Ansatz 1) würde funktionieren, wenn ich diese besagte Tabelle duplizieren würde und mit dem select in der Kopie die alten Daten holen würde.
Gibt es eine elegante Möglichkeit ohne die Tabelle zu duplizieren?
Danke für Eure Ideen!
Ciao samba
Comment