MySQL-Fehler in Trigger - "Unbekannte Spalte in der 'NEUEN'"

Bin ich mit einem inkonsistenten Fehler mit einer "before-insert-trigger" in MySQL und kann nicht herausfinden, der Grund.

Ich Habe eine Tabelle mit der folgenden Beschreibung:

+-----------+---------------+------+-----+---------+-------+
| Field     | Type          | Null | Key | Default | Extra |
+-----------+---------------+------+-----+---------+-------+
| ROW_ID    | int(11)       | NO   | PRI | 0       |       |
| ID        | int(11)       | NO   | UNI | NULL    |       |
| TITLE     | varchar(32)   | NO   |     | NULL    |       |
| TEXT      | varchar(500)  | NO   |     | NULL    |       |
| URL       | varchar(200)  | YES  |     | NULL    |       |
| MINUTE_IN | int(11)       | YES  |     | NULL    |       |
| SECOND_IN | int(11)       | YES  |     | NULL    |       |
| TVSHOW_ID | int(11)       | NO   | MUL | NULL    |       |
| IMAGE     | varchar(4000) | YES  |     | NULL    |       |
+-----------+---------------+------+-----+---------+-------+

Und ich habe einen Trigger mit der folgenden Anweisung:

delimiter $$
CREATE TRIGGER ACTIVATE_IRT_CONTENT BEFORE INSERT ON WEXTRAS_CONTENT
FOR EACH ROW
BEGIN
    IF (SELECT s.ACTIVE
        from WEXTRAS_TVSHOW s
        where s.id = NEW.tvshow_id) = 1 AND NEW.MINUTE_IN = 0 AND NEW.SECOND_IN = 0
    THEN SET NEW.MINUTE_IN = TIMESTAMPDIFF(MINUTE,(select INIT_TIME from WEXTRAS_TVSHOW s
                                                   where s.id = NEW.tvshow_id
                                                   ),sysdate());
         SET NEW.SECOND_IN = SECOND(SEC_TO_TIME(TIMESTAMPDIFF(SECOND,(select INIT_TIME from WEXTRAS_TVSHOW s
                                                                     where s.id = NEW.tvshow_id
                                                                     ),sysdate())));
    END IF;
END$$

delimiter ;

Das Problem ist, dass manchmal der folgende Fehler zurückgegeben:

Unbekannte Spalte 'MINUTE_IN' in 'NEUE'

Wenn dieser Fehler Auftritt, es wird nicht aufhören, bis ich löschen und neu erstellen der trigger mit genau der gleichen Aussage. Wenn ich das mache, der Fehler nicht Auftritt mehr und mehrere Einsätze auftreten, kein problem, bis das gleiche Problem gibt mit scheinbar ohne Grund.

Kann jemand mir mit diesem Problem helfen?
Vielen Dank im Voraus.

  • warum hast du 3 zusätzliche Semikolon in IF-Bedingung? und andere Semikolons in anderen Orten auch, ich hätte gedacht es würde beschweren sich über syntax-Fehler.
  • Oops...Das war eigentlich ein copy/paste Fehler beim zurücksetzen der Vergangenheit einige versuche, um zu sehen, ob das Problem würde nicht mehr auftreten. Ich bearbeitete meinen ursprünglichen post, um es zu korrigieren. Sorry...
  • +1 ich würde gerne wissen, was die Antwort ist auch, wie ich denke, dann haben Sie einen sehr merkwürdigen Fehler.
  • Ich konnte das problem nicht reproduzieren, der Fehler wird nicht generiert. Welche version von MySQL benutzt du? SQL Fiddle Test
  • Ich bin mit 5.6.15 auf einem CentOS 64-bit-Maschine. Ich bin auch angefangen zu denken, es kann ein MySQL Fehler. Ich kann nicht immer replizieren den Fehler so gut...dieses Verhalten scheint ziemlich random...
  • minute_in ist auf 'null : ja, vielleicht, wenn Sie Daten einfügen, ohne dabei einen Wert für die minute in das problem auftreten könnte, testen Sie dies ?
  • Sie überprüft aber kein Glück. Dennoch ist die insert-Anweisung, wenn der Fehler Auftritt, hat Sie den Wert '0'. Gestern habe ich versucht die Einstellung, die Werte, die ich brauche, um Variablen vor der Einstellung Sie zu MINUTE_IN und SECOND_IN mit diesen Variablen und so weit, so gut... hatte Nie einen ganzen Tag ohne Fehler, also ich fand eine Abhilfe für dieses Problem. Gehen, um ein paar mehr tests durch, um sicherzustellen wenn dadurch das problem gelöst und wenn es getan hat, werde ich sicher sein, diesen Beitrag zu aktualisieren.
  • Nur, um Ihnen die gute Nachricht, das problem habe gelöst indem Sie deklarieren zwei Variablen, die innerhalb der trigger und setzen Sie mit dem Ausdruck war ich mit einstellen MINUTE_IN und SECOND_IN und nach, dass die Einstellung MINUTE_IN und SECOND_IN auf diese Variablen.

InformationsquelleAutor barras | 2014-01-23
Schreibe einen Kommentar