Announcement

Collapse
No announcement yet.

Trigger - ist das möglich?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Trigger - ist das möglich?

    Hallo Leute,

    bin relativ neu in der Datenbankwelt und habe bisher hauptsächlich mit Abfragen gearbeitet, aber noch nicht tiefergehend.

    Ich habe eine mysql Datenbank Version 5.0.22 und eine Tabelle, die ständig mit Liveupdates vom System gefüttert wird.
    Um eine spezielle Auswertung zu fahren, möchte ich, wenn sich der Wert eines Feldes ändert, einen Timestamp in ein anderes Feld schreiben.

    Konkret habe ich ein Feld "Status".
    Das Feld Status hat den Wert "READY", wenn das System den Wert nun auf "INCALL" setzt, dann soll der aktuelle Timestamp in das Feld "status_aenderung" geschrieben werden.

    Ich habe den mysql EMS Manager und logischerweise Zugriff auf die Datenbank.

    Könnt ihr mir ein paar Tipps geben wie ich das realisieren könnte?

    Bin für alles dankbar

    Viele Grüsse
    Philip

  • #2
    Hallo,

    Infos zum Erstellen eines Triggers findest du auf der MysQL-Homepage.
    Über die Aliase NEW und OLD kannst du in einem BEFORE-UPDATE-Trigger auf die Werte der geänderten Spalten zugreifen und diese komfortabel vor dem eigentlichen Speichern ändern.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo Falk,

      vielen Dank, habe mich ein wenig eingelesen...
      Allerdings wirft er mir beim SPeichern immer ein SQL Error Syntax aus

      so funktioniert mein Code einwandfrei, bei jeder Änderung updatet er mein Feld, jetzt fehlt nur noch die WHERE Klausel.
      Code:
      CREATE DEFINER = 'root'@'%' TRIGGER `vicidial_live_agents_before_upd_tr` BEFORE UPDATE ON `vicidial_live_agents`
        FOR EACH ROW
      set new.status_aenderung = now();
      sobald ich diesen Code einsetze, kommt der SQL Syntax Fehler:
      Code:
      set new.status_aenderung = now() WHERE (new.status <> old.status);
      Wo ist mein Fehler??

      Grüsse
      Philip

      Comment


      • #4
        an der stelle verwendest du kein SQL. Das ist in der jeweiligen Datenbankprogrammiersprache geschrieben.
        Du musst so etwas verwenden wie:

        Code:
        if(new.status <> old.status)
          set new.status_aenderung = now() ;
        wobei mir dieses set auch spanisch vorkommt. Aber ich kenne mich mit MySQL leider nicht aus... kenne nur PL/SQL und da läufts so.

        Comment


        • #5
          super, danke!
          jetzt scheints zu klappen:

          Code:
          CREATE DEFINER = 'root'@'%' TRIGGER `vicidial_live_agents_before_upd_tr` BEFORE UPDATE ON `vicidial_live_agents`
            FOR EACH ROW
          BEGIN
          if(new.status != OLD.status) then 
          	set new.status_aenderung = now(); 
          end if;
          END;

          Comment

          Working...
          X