Trigger

krackmoe

Bekanntes Mitglied
Hi

Ich hab 2 Tabellen.
Ich möchte, dass wenn in einer Tabelle die Spalte "bezahlt" auf Ja geändert wird, das der Wert aus "anzahl" ausgelesen wird und in einer anderen Tabelle dazu addiert wird.
Funktioniert so etwas mit Triggern?
 

Michael...

Top Contributor
Ich hab 2 Tabellen.
Exceltabellen, Datenbanktabellen, JTables?
Funktioniert so etwas mit Triggern?
Mit Triggern kann man innerhalb einer Datenbank auf Änderungen in Datentabellen reagieren.
Wenn es das ist, was Du willst, lautet die Antwort: Ja.

Wenn Du uns Dein Vorhaben/ die Umstände genauer erläuterst, kann man Dir u.U. auch noch ein paar Hinweise geben. z.B. ob man für Dein Vorhaben Trigger notwendig/sinnvoll sind, ob Deine Datenbank sowas überhaupt unterstützt...
 

krackmoe

Bekanntes Mitglied
Also es sind 2 MySQL Tabellen.

Ich möchte einfach, dass wenn sich eine Spalte in der einen Tabelle ändert, dass ein Wert aus einer anderen Spalte in der anderen Tabelle dazu addiert wird.
Thats it...
 

Michael...

Top Contributor
Wenn das rein auf Datenbankebene ablaufen soll, dann geht's wohl nur über einen Trigger.

Dachte die Eingabe wird in einer Java GUI vorgenommen. Da lässt sich das ein bisschen einfacher gestalten - vor allem wenn man keine Erfahrung mit Triggern hat.
 

krackmoe

Bekanntes Mitglied
Naja.. doch.. ich hab ne .jsp Seite, auf der hab ich nen Link der auf ein servlet verlinkt.. und im Servlet wird dann eben die eine Spalte gesetzt. Und dadurch soll das ganze dann ausgelöst werden.
 
G

Gast2

Gast
Dann kannst du in dem Servlet auch einen zweiten JDBC Request machen ;)

Aber mit dem Trigger geht das auch ohne Probleme.
 

krackmoe

Bekanntes Mitglied
Code:
CREATE TRIGGER testref BEFORE UPDATE ON rechnung
  FOR EACH ROW BEGIN
    UPDATE arzt SET sms = sms + rechnung.anzahl WHERE id = arztId;
  END

Das haut nicht ganz hin... wie sag ich ihm in dem UPDATE Statement das er "sms" von der einen Tabelle mit der von rechnung "anzahl" zusammenaddieren soll?
 

Michael...

Top Contributor
Code:
CREATE TRIGGER testref BEFORE UPDATE ON rechnung
  FOR EACH ROW BEGIN
    UPDATE arzt SET sms = sms + rechnung.anzahl WHERE id = arztId;
  END

Das haut nicht ganz hin... wie sag ich ihm in dem UPDATE Statement das er "sms" von der einen Tabelle mit der von rechnung "anzahl" zusammenaddieren soll?
Mal abgesehen davon, dass das von einem Wertewechsel auf "Ja" abgehängen sollte (davon sehe ich hier überhaupt nichts), schaut es für mich so aus, als ob da ein Designfehler in der Datenstruktur vorliegt und bei richtigem DB Design der Trigger unnötig sein sollte. (Ist aber nur eine Vermutung, da ich die Datenstruktur nicht kenne)
 

krackmoe

Bekanntes Mitglied
Mh.. kann gut sein das es Designfehler gibt...

Mittlerweile hab ichs darauf geändert und das scheint gut zu funktioniern.. nur jetzt bin ich selber auf nen Designfehler bekommen.. den ich irgendwie angehen muss..

Code:
CREATE TRIGGER testref AFTER UPDATE ON rechnung
  FOR EACH ROW BEGIN
    UPDATE arzt SET sms = sms + 
    (SELECT anzahl FROM rechnung WHERE id = arzt.id AND bezahlt IS NOT NULL) 
    WHERE id = 1;
  END
 

Michael...

Top Contributor
Hier mal, wie man so einen Trigger in Oracle schreiben könnte. Sollte in MySQL ähnlich sein (hab diesbzgl. keine Erfahrungen)
SQL:
CREATE OR REPLACE
TRIGGER testTrigger AFTER UPDATE OF observedvalue ON observedtable
FOR EACH ROW
BEGIN
    IF :NEW.observedvalue = 'JA' THEN
      UPDATE observingtable
      SET observingtable.value = observingtable.value + :NEW.value
      WHERE observingtable.id = :NEW.id;
    END IF;
END testTrigger;
Wobei die Tabellen so aussehen:

Tabelle ObservingTable
ID, Value

Tabelle ObservedTable
ObservedValue, Value, ID (ID bezieht sich auf die ID aus ObservingTable)
 

Ähnliche Java Themen

Neue Themen


Oben