Mysql Trigger mit komplexem Statement

R

rickymaus

Guest
Hallo,

ich habe versucht, in Mysql einen Trigger mit einem zusammengesetzten Statement anzulegen. Wie hier im Forum und auch in der Mysql Doku beschrieben, habe ich versucht, vorher den Delimiter zu ändern. Das klappt aber nicht. Fehlermeldung: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER |

CREATE TRIGGER trigger1 .....

Hier mein Statement:

DELIMITER |

CREATE TRIGGER trigger1
BEFORE UPDATE ON tablex
FOR EACH ROW
BEGIN
set NEW.update_datum = sysdate( );
END;
|

CREATE TRIGGER trigger2
BEFORE INSERT ON tablex
FOR EACH ROW
BEGIN
SET NEW.insert_datum := sysdate( );
SET NEW.update_datum := sysdate( );
END;
|

DELIMITER;

Da die DB auf einem Webserver läuft, habe ich nur die Möglichkeit, phpmyadmin oder die php-Funktion mysql_query() zu verwenden. Kann das daran liegen? Gibt's eine Lösung?

Danke und Grüße
rickymaus

 
Ich kenn mich mit MySQL nicht wirklich aus. Aber da die Fehlermeldung auf einen simplen Syntaxerror hindeutet, fallen mir die beiden Zeilen auf:

CODE DELIMITER |

DELIMITER;

Bei der ersten Anweisung ist offensichtlich ein Space zwischen DELIMITER und dem Zeichen, bei der zweiten nicht.

Dann gibts noch was:


CODE set NEW.update_datum = sysdate( );

SET NEW.insert_datum := sysdate( );
SET NEW.update_datum := sysdate( );


Im ersten Trigger soll die Zuweisung über das Gleichzeichen erfolgen, beim zweiten über ein ":=" - wenn MySQL so empfindlich ist wie Oracle, dann müsste das einen Fehler auslösen.

Griessli
Irene
 
Überprüf erstmal, ob du die passende mysql Version hast. Trigger gibt es erst ab Version 5.0.2 und soweit ich weiß kann man den DELIMITER erst seit Version 5 per SQL-Statement ändern. Davor ging das glaube ich nur mit Befehlszeile. Habe in der Doku dazu aber nix gefunden... also ist das nur aus'm gedächtnis gefischt
biggrin.gif
 
Ja, MySQL ist Version 5, der einfache Trigger funktioniert - wenn ich keinen Delimiter setzen brauche.

Ich vermute mal eher, dass es daran liegt, dass Delimiter ein Konsolen-Befehl ist - kann das sein? Wie kann ich das umgehen?

Der simple Syntaxerror beginnt ja laut Fehlermeldung schon bei DELIMITER - was für mich darauf hindeutet, dass die DB mit dem Befehl an sich gar nix anfangen kann. Die DB-Version ist übrigens 5.0.27.

Weitere Ideen??
sad.gif


Danke, rickymaus
 
QUOTE Ich vermute mal eher, dass es daran liegt, dass Delimiter ein Konsolen-Befehl ist - kann das sein? Wie kann ich das umgehen?


Glaube, damit hast du recht. Muss mich auch korrigieren, den Befehl gibt es bereits in Version 4. Habe es gerade ausprobiert, und bei mir scheint der auch nur in der Konsole zu gehen.

Zu deinen Triggern fällt mir nur auf, dass man sich die sparen kann.


QUOTE
CREATE TABLE `tablex` (
`insert_datum` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
`update_datum` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE = MYISAM ;



Wenn du diese beiden Spalten so anlegst, und bei Inserts bzw. Updates einfach nicht verwendest, machen sie genau das was deine beiden Trigger machen würden.
 
Hallo Maik,

super Tipp, vielen Dank!! Auf die Idee bin ich gar nicht gekommen. Habe es schon getestet - funktioniert!

Danke!!
 
Hrrgg...
mad.gif


#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

Und mein Provider lässt mich nicht an andere Werkzeuge als phpmyadmin ran.

Naja, dann muss ich wohl über einen Umweg gehen - die zweite Spalte wird dann halt über einen Trigger gefüllt. Nicht sehr elegant, aber was hilft's.
 
Zurück
Oben