MYSQL-TRIGGER
Fuchswerk
- datenbank
CREATE TRIGGER min_gehalt_mitarbeiter
BEFORE INSERT ON Mitarbeiter
FOR EACH ROW
BEGIN
DECLARE foobar VARCHAR(45)
IF NEW Mitarbeiter.gehalt < 4 THEN
SELECT `Das ist die Fehlermeldung` INTO foobar FROM pizza;
END IF;
END; //
Funktioniert nicht, und ich finde den fehler gerade nicht, wäre genial wenn ihr mir hilft
Tach!
Funktioniert nicht, und ich finde den fehler gerade nicht, wäre genial wenn ihr mir hilft
Das ist keine Fehlerbeschreibung. Bitte beobachte und beschreibe genauer, was passiert (inklusive der Fehlermeldungen) und was du stattdessen gern hättest.
dedlfix.
Tach!
Funktioniert nicht, und ich finde den fehler gerade nicht, wäre genial wenn ihr mir hilft
Das ist keine Fehlerbeschreibung. Bitte beobachte und beschreibe genauer, was passiert (inklusive der Fehlermeldungen) und was du stattdessen gern hättest.
dedlfix.
Ist die Fehlermeldung:
12:03:00 CREATE TRIGGER min_gehalt_mitarbeiter BEFORE INSERT ON Mitarbeiter FOR EACH ROW BEGIN DECLARE foobar VARCHAR(45) IF NEW Mitarbeiter.gehalt < 4 THEN SELECT Das ist die Fehlermeldung
INTO foobar FROM Mitarbeiter; END IF; END Error Code: 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 'IF NEW Mitarbeiter.gehalt < 4 THEN SELECT Das ist die Fehlermeldung
INTO fooba' at line 6 0.000 sec
Ich möchte gerne das er eine Fehlermeldung ausgibt wenn in Mitarbeiter.Gehalt ein Wert unter dem von mir angegebenen reingeschrieben wird und die Zeile gelöscht wird
Tach!
Error Code: 1064. You have an error in your SQL syntax; [...] near 'IF NEW Mitarbeiter.gehalt < 4 THEN SELECT
Das ist die Fehlermeldung
INTO fooba' at line 6 0.000 sec
Dann schau mal in deinen Code kurz vor dem IF. Fehlt da nicht noch ein Semikolon?
Ich möchte gerne das er eine Fehlermeldung ausgibt wenn in Mitarbeiter.Gehalt ein Wert unter dem von mir angegebenen reingeschrieben wird und die Zeile gelöscht wird
Er? Nach meinem Wissensstand hat MySQL keine definierte Möglichkeit, ein Statement ordnungsgemäß abzubrechen[1]. Wenn dein Trigger eine ungünstige Bedingung feststellt, kann er nur selbst einen Fehler provozieren (SELECT von nicht vorhandener Tabelle, Zuweisen von String in INT-Variable), damit er nicht erfolgreich ist, woraufhin das andere Statement nicht ausgeführt wird. Eine Fehlerbehandlung derart in einem Trigger zu implementieren, halte ich jedoch für nicht besonders sauber.
Weiterhin kann MySQL nichts ausgeben. Es kann nur eine (oder mehrere) Ergebnismenge(n) zurückgeben. Aber ein Trigger arbeitet im Hintergrund auch für Statements, bei denen keine Ergebnismenge vorgesehen ist. Da ist es mit dem Ausgeben besonders schlecht.
[1] Ab MySQL 5.5 soll es Signals geben, mit denen man sowas tun kann, las ich.
dedlfix.
ne das hatt auch leider nicht geholfen..
Ich habs jetzt eh einfach gelassen, weil wie du schon gesagt hast, es sieht nicht sauber aus
13:20:57 CREATE TRIGGER min_gehalt_mitarbeiter BEFORE INSERT ON Mitarbeiter FOR EACH ROW BEGIN DECLARE foobar INT Error Code: 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 '' at line 5 0.000 sec
CREATE TRIGGER min_gehalt_mitarbeiter
BEFORE INSERT ON Mitarbeiter
FOR EACH ROW
BEGIN
DECLARE foobar INT
;IF NEW Mitarbeiter.gehalt < 0 THEN;
SELECT `Das ist die Fehlermeldung` INTO foobar FROM Mitarbeiter;
END IF
END;
Würde mich aber schon interessieren warum das nicht geht, einfach vom Verständnis her
Würde mich aber schon interessieren warum das nicht geht, einfach vom Verständnis her
Wo soll die Meldung landen? Du kannst höchstens dem Programm das auf die DB zugreift eine Meldung schicken. Das muss dann drauf vorbereitet sein und die dem Benutzer anzeigen.
Aber was ich eigentlich sagen wollte, so eine Prüfung gehört nicht in einen Trigger sondern in das Programm. Das sollte die Daten nur dann in die DB schreiben wenn es mit ihnen zufrieden ist.
Würde mich aber schon interessieren warum das nicht geht, einfach vom Verständnis her
Wo soll die Meldung landen? Du kannst höchstens dem Programm das auf die DB zugreift eine Meldung schicken. Das muss dann drauf vorbereitet sein und die dem Benutzer anzeigen.Aber was ich eigentlich sagen wollte, so eine Prüfung gehört nicht in einen Trigger sondern in das Programm. Das sollte die Daten nur dann in die DB schreiben wenn es mit ihnen zufrieden ist.
Danke euch beiden.
Ich würde auch das Programm eigentlich zum prüfen benutzen, aber der Prof hatte eindeutig gesagt kein programm drum rumschreiben, deswegen kam ja überhaupt erst diese Idee auf
aber der Prof hatte eindeutig gesagt kein programm drum rumschreiben
Ach dann war das eine Übungsaufgabe. Das müsste man dazu sagen, denn in dem Fall sollt ihr lernen wie man Trigger nutzen kann. Allerdings sind Übungsaufgaben nicht immer so wirklich prakxisnah :-)
Tach!
DECLARE foobar INT
;IF NEW Mitarbeiter.gehalt < 0 THEN;
Statements werden mit ; abgeschlossen. Dem DECLARE fehlt eins hintendran - nicht dem IF vorndran.
dedlfix.
Was solls denn machen?
Ich kenne MySQL nicht so gut dass ich Syntaxfehler erkennen könnte.
Aber so wie ich das sehe legst du eine Variable an, in die du den Text schreiben lässt. Danach ist der Trigger zu Ende, ohne dass noch irgendwas mit der Variablen passiert.
Hi,
IF NEW Mitarbeiter.gehalt < 4 THEN
Da fehlt ein Punkt (.) zwischen NEW und Mitarbeiter. Außerdem macht dein Code nichts und sollte, wenn die Tabelle pizza mehr als einen Eintrag hat, eine Warnung generieren (wenn ich es richtig im Kopf habe). Letzteres, weil man mit SELECT INTO nur eine Ergebniszeile haben darf.
Bis die Tage,
Matti
--
[Webapplikationen in C++ entwickeln](http://tntnet.org/)