Oracle Trigger Frage
sinan
- datenbank
Ich muss mit Oracle Trigger eine Änderungshistorie vornehmen. Eine Tabelle aus einer Oracle Datenbank spiegeln. in die gespiegelte Tabelle sollen 2 weitere felder rein USER_ID und ZEIT_STEMPEL. sobald in der orginal Tabelle irgendein eintrag geändert wird soll auf der gespiegelten Tabelle die User_ID (also wer hat den eintrag gemacht) und der zeitspempel (wann wurde der eintrag gemacht) in die gespiegelte tabelle eingetragen
ich bitte um eure hilfe
danke schonmal an alle leute die so lieb sind und mir versuchen weiterzuhelfen
ey kann mir keiner weiter helfen oder wie ?????
wo sind unsere profis ?
ey kann mir keiner weiter helfen oder wie ?????
wo sind unsere profis ?
Ja, drängler sind immer sehr beliebt und werden sicher alles stehen und liegen lassen, nur um dir helfen zu dürfen ...
ey kann mir keiner weiter helfen oder wie ?????
SET SERVEROUTPUT ON;
CREATE TRIGGER tr_so_nicht
AFTER INSERT ON t_good_will
FOR EACH ROW
BEGIN
IF :NEW.frechheit = 1 THEN
DBMS_OUTPUT.PUT_LINE('Doku lesen wenn das Projekt es erfordert!');
END IF;
END;
/
SHOW ERROR;
wo sind unsere profis ?
SELECT ufn_Die_haben_wohl_auf_sowas_keinen_Bock() FROM DUAL;
Mit ganz lieben Grüssen
Solkar
Hallo,
Ich muss mit Oracle Trigger eine Änderungshistorie vornehmen. Eine Tabelle aus einer Oracle Datenbank spiegeln. in die gespiegelte Tabelle sollen 2 weitere felder rein USER_ID und ZEIT_STEMPEL. sobald in der orginal Tabelle irgendein eintrag geändert wird soll auf der gespiegelten Tabelle die User_ID (also wer hat den eintrag gemacht) und der zeitspempel (wann wurde der eintrag gemacht) in die gespiegelte tabelle eingetragen
Folgende beiden Beispiele machen eigentlich genau das, was Du willst, für den normalen Fall, dass jemand direkt die Tabelle bearbeitet (ohne Spiegelung):
http://www.techonthenet.com/oracle/triggers/before_insert.php
http://www.techonthenet.com/oracle/triggers/before_update.php
(Unter der Annahme, dass der Oracle-User der User ist, den Du da abspeichern willst - wenn Du einen anderen User meinst - z.B. den einer Webanwenung - dann hast Du Pech gehabt, das geht dann prinzipbedingt nicht, weil Oracle ja die Info gar nicht haben kann.)
Wenn Du die Tabelle spiegelst, wird es komplizierter - es hängt wohl davon ab, wie Du die Spiegelung durchführst. Ich bin mir nicht mehr ganz sicher, aber ich glaube mich erinnern zu können, dass Trigger auf MATERIALIZED VIEWs funktionieren - falls Du die Tabelle also über einen MV spiegelst, kannst Du bei Änderungen zumindest einen Trigger laufen lassen. Und MVs haben wenn ich mich nicht komplett täusche auch den Vorteil, dass die Tabellenstruktur nicht 1:1 übernommen werden muss.
Was allerdings ein riesiges Problem wird, ist im Trigger auf einen MV an die korrekten Informationen (User, Zeitpunkt) zu kommen: Im Trigger stehen als Info nämlich nur zur Verfügung:
Zusammengefasst: Die Info, welcher User wann einen Eintrag in eine Tabelle gemacht hat und wann das genau passiert ist, kannst Du prinzipbedingt beim NACHTRÄGLICHEN Spiegeln nicht mehr herausbekommen, wenn Du das nicht gleich beim ersten Eintragen direkt speicherst. Zudem könnte es sein, dass die Info "User", die Du aus der Datenbank bekommst, nicht ganz Deinen Erwartungen an die Info "User" entspricht, weil Oracle als "User" natürlich nur den kennt, der sich mit der DB verbindet.
Alles in allem kann man wohl sagen, dass Dein Vorhaben auf die von Dir vorgeschlagene Weise wohl nicht umsetzbar ist.
Viele Grüße,
Christian