SQL Trigger in MariaDB

schneckenschaef

Cadet 1st Year
Registriert
Jan. 2017
Beiträge
13
Hallo zusammen,
da mir bei meinen letzten beiden Problemen hier so gut geholfen wurde, versuche ich es ein weiteres Mal. Ich habe einen Trigger in einer MySQL-Datenbank erstellt, der dort auch hervorragend funktioniert. Er sieht so aus:

Code:
CREATE TRIGGER `Projektzuordnung_via_Code_insert` AFTER INSERT ON `probandencode` FOR EACH ROW 
IF NEW.CODE LIKE '1112001%' THEN
UPDATE screening.projektzuordnung_comment SET screening.projektzuordnung_comment.probandengruppe=1 WHERE screening.projektzuordnung_comment.FK_PROBAND=NEW.FK_PROBAND; 
END IF

Leider sagt mir MariaDB:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 3

Hat jemand eine idee?
Vielen Dank bereits im Voraus
Martin
 
Du kannst mir erzählen was du willst, aber das da oben ist NICHT der Code dem du zum Einfügen verwendest.

In Zeile 3 sehe ich weder Apostroph noch Anführungsstriche.

Was ist "NEW"?
 
Da fehlt der Begin/End Block vom Trigger, der nach dem "For each row" anfangen müsste. Oder sehe ich das falsch?

Code:
DELIMITER //

CREATE TRIGGER `Projektzuordnung_via_Code_insert`
AFTER INSERT ON 
    `probandencode` FOR EACH ROW
BEGIN
    IF NEW.CODE LIKE '1112001%' THEN
      UPDATE screening.projektzuordnung_comment SET
         screening.projektzuordnung_comment.probandengruppe=1
      WHERE screening.projektzuordnung_comment.FK_PROBAND=NEW.FK_PROBAND; 
    END IF
END; //

DELIMITER ;

@Sephe: NEW ist der neue Datensatz auf den man hier referenziert.
 
Zuletzt bearbeitet:
Die Zeilennummer ist ein Blödsinn vermute ich. MariaDB formatiert das etwas unsinnig um. Das Ganze sieht dann so aus:
Unbenannt.PNG
Wie man sieht, bringt auch "Begin/End" nichts :-(
 
Gemäß Doku müsste es "BEGIN ATOMIC" lauten. ATOMIC scheint nicht optional zu sein.
 
Atomic war auf jeden Fall schon mal ein guter Hinweis, danke. Das sieht jetzt so aus:

Code:
CREATE TRIGGER `Projektzuordnung_via_Code_insert` AFTER INSERT ON `probandencode` FOR EACH ROW 
BEGIN ATOMIC
IF NEW.CODE LIKE '1112001%' THEN
UPDATE screening.projektzuordnung_comment SET screening.projektzuordnung_comment.probandengruppe=1 WHERE screening.projektzuordnung_comment.FK_PROBAND=NEW.FK_PROBAND; 
END IF
END
Jetzt wird immerhin der Ort des Problems genauer spezifiziert. Leider ist mir immer noch nicht klar, was da nicht geht.
Unbenannt.PNG
Mein Gedanke war auch, dass es daran liegen kann, dass der Trigger Daten in ein anderes Schema schreiben soll aber der Fehler wird ja bei der IF-Bedingung ausgeworfen und sagt nichts von unbekannten Tabellen und Spalten sondern, dass die Syntax nicht stimmt.
 
Zuletzt bearbeitet:
Fehlt da ein Semikolon hinter dem ELSE IF?
 
Hab die Lösung gefunden. Es fehlt der Delimiter (wurde oben bereits erwähnt) aber dann muss das "Atomic" wieder weg:
Code:
DELIMITER |
CREATE TRIGGER `Projektzuordnung_via_Code_insert` AFTER INSERT ON `probandencode` FOR EACH ROW 
BEGIN
IF NEW.CODE LIKE '1112001%' THEN
UPDATE screening.projektzuordnung_comment SET screening.projektzuordnung_comment.probandengruppe=1 WHERE screening.projektzuordnung_comment.FK_PROBAND=NEW.FK_PROBAND; 
END IF;
END|
DELIMITER ;
 
Stimmt. Ich hatte in meinem Post oben nur das fehlende Begin/end erwähnt. Aber den Delimiter-Teil mit in mein Code-Snippet eingebaut. :-)
Dann war mein Tipp ja doch richtig! :-)
 
Zuletzt bearbeitet:
Zurück
Oben