DJTank Geschrieben 10. Oktober 2005 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mme Geschrieben 11. Oktober 2005 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DJTank Geschrieben 11. Oktober 2005 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mme Geschrieben 11. Oktober 2005 Teilen 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DJTank Geschrieben 11. Oktober 2005 Autor Teilen 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; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DJTank Geschrieben 11. Oktober 2005 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DJTank Geschrieben 11. Oktober 2005 Autor Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.