Hallo Henry,
Fehler 1 - wie Auge gesagt hat: Der Test auf Gleichheit gelingt mit =. Das == gehört nach C, PHP oder JavaScript. SQL ist kein C-oid.
Hinweis 1 - Hat die Parameter-Tabele genau eine Zeile? Andernfalls gibt's einen Fehler 1242 - Subquery returns more than 1 row.
Hinweis 2 - in C-oiden Sprachen muss eine Bedingung eingeklammert werden. SQL Kontrollbefehle sind nicht C-oid. Sie sind eher wie COBOL. Und genau deshalb gibt's
Fehler 2 - Hatten wir schon, musste ich auch nochmal nachlesen. Per Default ist es so, dass der Client, sobald er ein ; findet, alles was er hat zum Server schickt und ausführen lässt.[1]
In deinem Fall schickt er deshalb
IF (SELECT stoparchiv FROM parameter) = 1
THEN
exit
und der Server beschwert sich über das fehlende END IF.
Lösung: DELIMITER - damit kannst Du das Semikolon durch ein anderes Zeichen oder sogar eine Zeichenfolge ersetzen. Das MariaDB-Handbuch schlägt // vor, aber du könntest auch "RUN" oder "SUPERCALIFRAGILISTICEXPIALIDOCIOUS" verwenden.
DELIMITER SUPERCALIFRAGILISTICEXPIALIDOCIOUS
IF ((SELECT stoparchiv FROM parameter) == 1)
THEN
EXIT;
END IF
SUPERCALIFRAGILISTICEXPIALIDOCIOUS
DELIMITER ;
Und wie Julie Andrews schon wusste: damit geht alles besser 😉
Rolf
sumpsi - posui - obstruxi
Deswegen erwähnte ich COBOL - macht man dort einen Punkt, ist das Statement zu Ende. Auch mitten in einer Kontrollstruktur. Kompatibilität zum Kambrium der IT ist nun mal gruselig ↩︎