Zum Inhalt springen

Oracle8 Update-Trigger Problem weil Trigger-Noob


DJTank

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Alles klar :) dankeschön...ich habe den Trigger jetzt funktionstüchtig hinbekommen :rolleyes:


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;

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erm, noch etwas *g*

Nun wollte ich vom Access-Frontend aus auf die Tabelle "hacos.t_zeile" ein Update (auf einen Primary Key :rolleyes: ) 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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...