Seite 1 von 1

Fehler in einem MySQL-Trigger weiterleiten

BeitragVerfasst: So 30. Dez 2018, 17:08
von Mauli
Hallöchen ich bin noch relativ am Anfang was meine SQL Kenntnisse angeht und da mich noch ein paar Dinge in anderen Foren verwirren wollte ich jetzt einfach mal selber Nachfragen. Und zwar gehts um Folgendes ich wollte im Grunde einen einfachen Check Constraint machen das ich in meinen Datensatz nur Zahlen Größer 0 eingeben kann. So da nun Check Constraints in MySQl nicht funktionieren habe ich es dann mit Triggern versucht.
Das klappte auch soweit das ich, wenn nun versucht wird eine Negative Zahl einzugeben ein Default Wert von 0 Übergeben wird.

Allerdings möchte ich das bei einem solchen Verstoß einfach eine Fehler Meldung ausgegeben wird, ähnlich einer Exception in Java.
Da scheitere ich allerdings noch dran^^
Der Code sieht aus wie folgt:
Code: Alles auswählen
DELIMITER $$  //<- Warum brauch ich das eigentlich?
CREATE TRIGGER test BEFORE UPDATE ON Zahlentabelle
FOR EACH ROW
BEGIN
IF NEW.Zahl < 0 THEN
SET New.Zahl = 0;
END IF;
END$$


So funktionierts, allerdings möchte ich halt eine Fehlermeldung haben was genau muss ich da machen?

freundliche Grüße
Mauli

Re: Fehler in einem MySQL-Trigger weiterleiten

BeitragVerfasst: So 30. Dez 2018, 22:38
von SQLUnion
Hallo Mauli,

so nun zu deiner ersten Frage:
Code: Alles auswählen
DELIMITER $$  //<- Warum brauch ich das eigentlich?

Die DELIMITER-Anweisung ändert das Standardbegrenzungszeichen, das Semikolon (;), in ein anderes. Das Trennzeichen wird vom Semikolon (;) in Doppelstriche // umgewandelt. Das Kommando gehört aber nicht zu MySQL, nur zum Client, den du verwendest.

Nun zum Rest:
Code: Alles auswählen
CREATE TRIGGER test BEFORE UPDATE ON Zahlentabelle
FOR EACH ROW
BEGIN
IF NEW.Zahl < 0 THEN
SET New.Zahl = 0;
END IF;
END$$

Das, was du in Java kennst, gibt es bei MySQL nicht. Du könntest den Fehler aber in eine Logging-Tabelle schreiben, auslesen und an den User weiterleiten. Das ist aber nur ein Workaround, der mir gerade einfällt - eher quick & dirty ;)

Gruß,
SQLUnion

Re: Fehler in einem MySQL-Trigger weiterleiten

BeitragVerfasst: Mo 31. Dez 2018, 12:51
von Mauli
Danke erstmal für die Antwort :)

Ginge es auch, z.B. den Befehl einfach nicht auszuführen? Oder für NEW.Zahl einfach den Alten Wert zu speichern?

Achja und fällt dir vielleicht ein Ansatz dazu ein wie das mit dem Fehler auszugeben wäre? :)

Gruß

Re: Fehler in einem MySQL-Trigger weiterleiten

BeitragVerfasst: Mi 2. Jan 2019, 21:07
von Mauli
Habs letztendlich dann mit ner Procedure gelöst die ich dann im Trigger aufrufe :mrgreen:
Also das ist das was ich eigentlich wollte:

DELIMITER $$
CREATE PROCEDURE checkZahl(IN Zahl1 int(10), IN Zahl2 int(10))
BEGIN
IF Zahl1 < Zahl2 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Zahl zu klein!';
END IF;
END$$
DELIMITER ;

DELIMITER $$
CREATE TRIGGER checkZahlUpdate BEFORE UPDATE ON Schauspieler
FOR EACH ROW
BEGIN
CALL checkZahl(NEW.Zahl1, NEW.Zahl2);
END$$
DELIMITER ;

Re: Fehler in einem MySQL-Trigger weiterleiten

BeitragVerfasst: Do 3. Jan 2019, 10:14
von SQLUnion
Wollte gerade noch antworten ;)
Super, dass Du eine Lösung gefunden hast.

Gruß,
SQLUnion