Re: Oracle - Trigger Problem
- From: Andreas Mosmann <keineemails@xxxxxx>
- Date: Thu, 22 Sep 2005 16:16:51 +0200
Saphir2k schrieb am 22.09.2005 in <1127392288.394913.126720@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>:
Hallo zusammen,
ich habe folgendes Problem bei dem ich dringend von euch hilfe bräuchte.
Habe ich Dich richtig verstanden und Du willst in eine zweite DB schreiben? Dann kann ich Dir nicht weiterhelfen.Ich habe eine Tabelle (nennen wir sie TabOrg) in die Daten geschrieben und angelegt werden. Ich benötige nun aber die Daten die in dieser DB stehen möglichst sofort nach einem schreiben / ändern auch in einer zweiten DB (nennen wir sie TabDup). Ziel ist es also das in beiden Tabellen (TabOrg und TabDup) die gleichen Daten stehen. Bitte fragt nicht nach warum und wieso, das ist leider alles (wie so oft) Historisch bedingt und sehr umständlich zu erklären. Es geht mir mehr um das Problem selbst.
Solltest DU mit DB Dabelle meinen, dann vieleicht.
Uns vielen sofort die Trigger für diesen Einsatzweck ein. Ein INSERT Trigger war auch kein Problem. INSERT TRIGGER an TabOrg mit folgendem Inhalt:
Jau, das sollte so gehen. Wichtig ist das AFTER, weil da schon alle Trigger, die die neuen Werte modifizieren können, abgearbeitet sind. Solltest Du mehrere AFTER INSERT ON TEST ... habe, müßtest Du sie zusammenfassen, weil Du sonst nicht weißt, ob bei einer EXCEPTION Deiner schon ausgeführt wurde oder nicht mehr ausgeführt wird.--- CREATE OR REPLACE TRIGGER "TEST"."TABORG_IA_ROW" AFTER INSERT ON "TEST"."TabOrg" FOR EACH ROW begin insert into "TabDup" values(:new.FeldXY,:new.FeldXYZ,:new.ZahlXY); end; ---
(Das ganze ist m.E. recht tricky, ich habe hier ein ähnliches Problem)
Nur, daß Du die einzelnen Tabellenfelder aus dem Data- Dictionary auslesen könntest und diese Trigger damit automatisch durch ein Script schreiben lassen könntest. So mache ich das jedenfalls.Das funktioniert auch zum Test recht gut.Bis auf den umstand das wirklich für jede Tabelle die kompletten Tabellenfelder eingetragen werden müssen, scheint das praktikabel zu sein (oder hat jemand eine bessere Lösung?).
Diese WHERE- Bedingung brauchst Du eigentlich nicht, du müßtest als WHERE den Primärschlüssel verwenden.Als ich mich dann an das erstellen für den Update Trigger machen wollte, hing ich komplett. Mir fehlt dort komplett der Ansatz für eine Lösung. Wie kann ich praktisch das gleiche Update das auf die Original Tabelle gemacht wurde auch auf eine andere Absetzen? Wie komme ich an die Werte die in der WHERE Bedingung abgesetzt wurden?
Zur Erklärung nochmal kurz: Es wird ein UPDATE auf TabOrg gemacht: UPDATE TabOrg SET FeldXY='test1', FELDXYZ='test2' WHERE ZahlXY = '
--- CREATE OR REPLACE TRIGGER "TEST"."TABORG_IA_ROW" AFTER UPDATE ON "TEST"."TabOrg" FOR EACH ROW begin UPDATE "TabDup" SET FeldXY = :new.FeldXY, FeldXYZ = :new.FeldXYZ, ZahlXY = :new.ZahlXY WHERE PrimärschlüsselTeil1 = :new.PrimärschlüsselTeil1 and PrimärschlüsselTeil2 = :new.PrimärschlüsselTeil2 ... ; end; ---
Vorausgesetzt, Du hast zuverlässig hinbekommen, daß die Daten dupliziert werden, sollte das gehen.
Spannend ist es natürlich noch, wenn Du den Primärschlüssel änderst und dieser Bestandteil eines Foreign- Key- Constraints ist, der über einen Trigger erzwungen wird. Dann müßtest Du eben diese Konstruktion für TabDup auch nachbauen.
Meines Wissens gar nicht, aber wie gesagt, da Du ja for each row hast, sollte das keie Rolle spielen.Wie kann ich in dem Trigger nun auslesen was in der WHERE Klausel Angegeben wurde?
Es wäre wirklich sehr nett von euch wenn Ihr mir auf den richtigen Weg helfen könntet.
Ob das der richtige Weg ist, kann ich Dir natürlich nicht sagen ;)
Ich bedanke mich schonmal herzlich im vorraus! Thorsten
Andreas
-- wenn email, dann AndreasMosmann <bei> web <punkt> de .
- References:
- Oracle - Trigger Problem
- From: Saphir2k
- Oracle - Trigger Problem
- Prev by Date: Re: Trigger Problem
- Next by Date: Re: Trigger Problem
- Previous by thread: Oracle - Trigger Problem
- Index(es):
Relevant Pages
|