Datenbank Forum - für Anfänger und Profis

Willkommen im Datenbank Forum von Datenbanken-verstehen.de - Das Datenbank, Data Warehouse & Business Intelligence Forum!

Das Datenbank Forum für Anfänger und Profis ist eine Community zu den Themen Datenbanken, Data Warehouse & Business Intelligence. Nimm teil an der Community von Datenbanken-verstehen.de und tausch dich mit deinen Fragen und Lösungen mit anderen Nutzern aus.

Als registrierter Benutzer genießt Du viele Vorteile, wie

  • den vollen Zugang zu allen Foren und Unterforen
  • Kostenloses Lernmaterial inkl. Lösungen zum Thema Datenbanken
  • Zugriff auf DB-Tutorials, Best Practices und SQL-Snippets

Bevor Du einen Beitrag verfassen möchtest, kannst Du dich einfach kostenlos registrieren.

oder Einloggen mit



Beachte bitte die Forenregeln von Datenbanken-verstehen.de. Wir wünschen Dir viel Spaß im Datenbank Forum! - Dein Datenbanken-verstehen.de-Team

Fehler in einem MySQL-Trigger weiterleiten

Alles zur Datenbankentwicklung im MySQL-Umfeld...

Fehler in einem MySQL-Trigger weiterleiten

Beitragvon Mauli » So 30. Dez 2018, 17:08

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
Mauli
 
Beiträge: 4
Registriert: So 30. Dez 2018, 16:57

Re: Fehler in einem MySQL-Trigger weiterleiten

Beitragvon SQLUnion » So 30. Dez 2018, 22:38

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
SQLUnion
 
Beiträge: 196
Registriert: Fr 1. Nov 2013, 15:54

Re: Fehler in einem MySQL-Trigger weiterleiten

Beitragvon Mauli » Mo 31. Dez 2018, 12:51

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ß
Mauli
 
Beiträge: 4
Registriert: So 30. Dez 2018, 16:57

Re: Fehler in einem MySQL-Trigger weiterleiten

Beitragvon Mauli » Mi 2. Jan 2019, 21:07

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 ;
Mauli
 
Beiträge: 4
Registriert: So 30. Dez 2018, 16:57

Re: Fehler in einem MySQL-Trigger weiterleiten

Beitragvon SQLUnion » Do 3. Jan 2019, 10:14

Wollte gerade noch antworten ;)
Super, dass Du eine Lösung gefunden hast.

Gruß,
SQLUnion
SQLUnion
 
Beiträge: 196
Registriert: Fr 1. Nov 2013, 15:54


Zurück zu MySQL

 


  • Related topics
    Antworten
    Zugriffe
    Letzter Beitrag

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

  • Jetzt Fan werden
  • Newsletter abonnieren? Hier anmelden!

    Alle Informationen aus dem Portal, Blog und Forum in einem Newsletter!

    E-Mail-Adresse: