Switch to full style
Alles zur Datenbankentwicklung im Oracle-Umfeld...
Antwort erstellen

Trigger before update on object_value on table

Di 18. Jun 2019, 15:06

Hallo ich habe folgendes Problem und finde leider keine Lösung dazu:

ich habe einen Datentyp stats der die Attribute (max_hp, hp, mp, armor_value) enthält.
Diesen habe ich in meiner Tabelle Creature als "attr stats" umgesetzt.
Das funktioniert auch alles tadellos, nur möchte ich nun einen Trigger haben, der feuert sobald auf max_hp geupdated wird.

ursprünglich (Bevor ich den Datentyp stats hatte) sah der Trigger so aus:

Code:
create or replace TRIGGER hp_maxhp
    BEFORE UPDATE OF max_hp ON Creature
    FOR EACH ROW
        BEGIN
            IF(:OLD.attr.hp <= :NEW.attr.max_hp) THEN
                :NEW.attr.hp := :NEW.attr.max_hp;
            ELSE NULL;
            END IF;
        END;
      /


Wenn ich anstatt max_hp aber nun attr dahin schreibe, feuert der ja egal auf welches attribut geupdatet wird..
Wie bekomme ich es nun hin das der nur feuert wenn explizit max_hp ein update bekommt??

Freundliche Grüße

Mauli

Re: Trigger before update on object_value on table

Fr 28. Jun 2019, 07:24

Hallo Mauli,

ich komme jetzt nicht aus der Oracle-Welt, aber kannst Du den Trigger nicht innerhalb über Case When steuern - so
als Fallunterscheidung?

Zum Beispiel sowas:
Code:
create or replace
  TRIGGER ADD_CREATE_DT
  after UPDATE of approved ON Artikel
  for each row
  when (new.approved = 'Y')
  BEGIN
  :new.create_dt := sysdate;
  END;


Würde auch mit IF-Klausel gehen, Case When ist aber schneller...
Antwort erstellen