DJTank Geschrieben 10. Oktober 2005 Geschrieben 10. Oktober 2005 Hey Leute, bin dran mir einen Update-Trigger zu basteln (wer nicht weiß was ich meine, dass ist wie das "ON DELETE CASCADE" -> Löschweitergabe, nur eben zum Aktualisieren statt Löschen). Mein Versuch sieht folgendermaßen aus: CREATE OR REPLACE TRIGGER "HACOS"."TRIG2" AFTER UPDATE OF "WERT" ON "HACOS"."T_ZEILE" FOR EACH ROW BEGIN UPDATE hacos.t_zeile_memo set pos = :hacos.t_zeile.wert; END; Nach verzweifelten Versuchen in SQLPLUS habe ichs dann mittels OEM probiert und dabei ist mir noch folgende Fehlermeldung übriggeblieben: PLS-00049: Ungültige Bindevariable 'HACOS.T_ZEILE' Wie gehört der Trigger richtig? Ich danke euch. lg Stefan
mme Geschrieben 11. Oktober 2005 Geschrieben 11. Oktober 2005 du willst doch einen Wert setzen den du aus einer Bindevariable holst... Was du machst ist folgendes, du sagst der DB sie soll in im Schema hacos in der tabelle t_zeile den Inhalt der Spalte wert hohlen. Das ist keine Bindvariable sondern eine Spalte. Den Inhalt dieser Spalte kann er aber nicht zuweisen, weil er nicht weiß welche row du aus dieser Tabelle haben willst. Er merkt nicht das du meinst das er die Zeile nehmen soll wo er ja sowieso gerade ändert. Lösung: Bei jedem Update werden die alten werte in die Bindvariablen old.spaltenname und die neuen Werte in die Bindvariable new.spaltenname geschrieben. Also holst du dir das einfach aus dieser Bindvariable.... UPDATE hacos.t_zeile_memo set pos = :new.wert; Achtung das geht natürlich nur bei rowtriggern nicht bei statementtriggern, da bei statementtriggern mehrere Zeilen geändert werden könnten und er dann nicht weiß denn Wert welcher Zeile er nehmen soll. Grüße mme
DJTank Geschrieben 11. Oktober 2005 Autor Geschrieben 11. Oktober 2005 Okay, ich hab mal deine Zeile eingefügt, aber ich bekomme immer noch PLS-00049: Ungültige Bindevariable 'NEW.WERT' Zusatzfragen: - Wie und wo definiere ich, ob es ein Statement- oder ein Rowtrigger ist? - Hast du zufällig nen Link zu ner guten Inet-Seite zu dem Thema für mich? Ich danke dir
mme Geschrieben 11. Oktober 2005 Geschrieben 11. Oktober 2005 du hast einen zeilen trigger das definiert man über "for each row" wenn du das weglässt hast du automatisch einen statementtrigger... wegen der anderen sachen gucke ich nochmal...
DJTank Geschrieben 11. Oktober 2005 Autor Geschrieben 11. Oktober 2005 Alles klar dankeschön...ich habe den Trigger jetzt funktionstüchtig hinbekommen CREATE OR REPLACE TRIGGER HACOS.TRIG2 AFTER UPDATE OF WERT ON HACOS.T_ZEILE FOR EACH ROW BEGIN UPDATE hacos.t_zeile_memo set pos = :new.wert where pos=:old.wert and pronr1=:old.pronr1; END;
DJTank Geschrieben 11. Oktober 2005 Autor Geschrieben 11. Oktober 2005 Erm, noch etwas *g* Nun wollte ich vom Access-Frontend aus auf die Tabelle "hacos.t_zeile" ein Update (auf einen Primary Key ) machen, welcher natürlich wieder eindeutig wäre. Das Update auf diese Tabelle sollte mittels des Triggers den Primary Key der Tabelle "hacos.t_zeile_memo" ebenfalls updaten. Nun bekomme ich logischerweise folgenden Fehler im Access-FrontEnd: Dieser Datensatz wurde seit Beginn der Verarbeitung von einem anderen Benutzer geändert... Meine Fragen: 1) Ist es überhaupt möglich auf diese Weise derartige Daten zu aktualisieren 2) Kann ich das Problem in Oracle lösen oder muss ich im FrontEnd etwas verändern? lg Stefan EDIT: Zum besseren Verständnis, hier die Datenstruktur: Tabelle "hacos.t_zeile" Feld Constraint --------------------------- pronr1 PK wert PK ...diverse weiter efelder ohne constraint... Tabelle "hacos.t_zeile_memo" Feld Constraint --------------------------- pronr1 PK sowie FK auf t_zeile.pronr1 mit on delete cascade pos PK sowie FK auf t_zeile.wert mit on delete cascade o_memo u_memo
DJTank Geschrieben 11. Oktober 2005 Autor Geschrieben 11. Oktober 2005 Das ganze hat sich erledigt dankeschön. Ich musste die Fk's entfernen und die Löschweitergabe mit einem Trigger lösen.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden