Ernst Riha: TRIGGER

Hallo, ich stehe mit einem Trigger an, den ich in WordPress brauchte, um eine Werte-Kombination in eine eigene Tabelle zu schreiben, sobald eine neue Seite (post) erstellt wird . Habe folgen des versucht:

XXX...posts ist die WP-Tabelle, FM-Trauerfall die zu beschreibende

CREATE TRIGGER nach_trauerfall_neuz
AFTER INSERT
ON XXX...posts FOR EACH ROW
BEGIN
    IF NEW.post_name IS NOT NULL THEN
        INSERT INTO FM_Trauerfall (ID_Post, Name)
        VALUES(new.ID,NEW.post_name);
    END IF;
END

Was mache ich falsch? Bin für jeden Tipp dankbar ...

  1. Hi,

    Was mache ich falsch? Bin für jeden Tipp dankbar ...

    Du sagst nicht, was passiert.

    Bekommst Du einen Syntaxfehler, wenn Du das CREATE TRIGGER ausführst?

    Oder wird das CREATE TRIGGER ausgeführt, aber der Trigger macht das INSERT` nicht?

    Oder …?

    cu,
    Andreas a/k/a MudGuard

    1. Der Eintrag in der Zieltabelle fehlt ... als ob der Trigger wirkungslos bliebe.

  2. Hi,

    CREATE TRIGGER nach_trauerfall_neuz
    AFTER INSERT
    ON XXX...posts FOR EACH ROW
    BEGIN
        IF NEW.post_name IS NOT NULL THEN
            INSERT INTO FM_Trauerfall (ID_Post, Name)
            VALUES(new.ID,NEW.post_name);
        END IF;
    END
    

    muß das NEW.ID heißen? Großgeschrieben?

    cu,
    Andreas a/k/a MudGuard

    1. werd das NEW gross gleich testen, danke!

      1. Hallo Ernst,

        ich bezweifle, dass SQL Schlüsselwörter case sensitive sind.

        Welches DBMS ist das, ganz genau?

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Hi,

          ich bezweifle, dass SQL Schlüsselwörter case sensitive sind.

          ich eigentlich auch. Aber das war das einzige, was mir an dem Statement aufgefallen ist.

          Und wenn ich mit der SqlWorkbench auf Mysql-DBs gehe, sind die Tabellennamen case-sensitive (die Spaltennamen dagegen nicht - warum auch immer).

          Und in gewisser Weise bezeichnet das NEW ja eine Tabelle(nzeile) …

          In allen Mysql-Trigger-Beispielen, die ich gesehen habe, waren OLD und NEW immer großgeschrieben.

          Und der Test mit NEW.ID statt new.ID kostet ja auch keinen großen Aufwand. Also lieber kurz ausprobieren, um das als Fehlerursache sicher auszuschließen.

          cu,
          Andreas a/k/a MudGuard

          1. Hallo Andreas,

            man sollte wohl auch mal prüfen, ob SQLWorkbench (oder phpmyadmin) den Trigger an der XXX...posts Tabelle auflisten. Müssten sie eigentlich. Aber vielleicht klebt das Ding irgendwo anders, vielleicht gibt's die Tabelle mit unterschiedlichen Präfixen mehrmals, oder die FM...Tabelle hat ein anderes Präfix und der Trigger findet seine Zieltabelle nicht. Oder es gibt beim INSERT einen Duplicate Key, oder eine erforderliche Spalte wird nicht befüllt.

            Da gibt's siebenunddrölfzig Möglichkeiten, die ohne Kenntnis der DB-Struktur nicht zu finden sind.

            Keine Ahnung, wie MYSQL Fehler berichtet, die bei der Ausführung von Triggern auftreten. Lassen die das Statement scheitern, das den Trigger getriggert hat? Bleibt der Trigger leise schluchzend in seiner Ecke und jammert "ich kann das aber nicht!"? Gibt's eine Logdatei?

            Rolf

            --
            sumpsi - posui - obstruxi
  3. Danke an alle! Der Trigger arbeitet jetzt mit dem grossen NEW. wie beabsichtigt.

    1. Hi,

      Danke an alle! Der Trigger arbeitet jetzt mit dem grossen NEW. wie beabsichtigt.

      Hatte ich also doch den richtigen Riecher - freut mich, daß es jetzt funktioniert.

      Und noch mehr, daß Du das hier auch zurückgemeldet hast!

      cu,
      Andreas a/k/a MudGuard