Das könnte an deinem SQL-Server liegen.
Ja. Mein Tisch gibt die Form meiner Stirn schon wieder ... Ich hatte tatsächlich einen alten MySql-5.7-Server (Eine virtuelle Maschine, gemacht für ein Seminar) am Start.
Ich hab die Geschichte um einen weiteren Fehler und um einen regulären Ausdruck erweitert. Geht mit Mysql 5.7 und Mariadb 10.0:
CREATE TABLE `tabelle` ( `spalte` VARCHAR( 100 ) NOT NULL );
DELIMITER $
CREATE PROCEDURE `check_tabelle`(IN `spalte` varchar( 100 ) )
BEGIN
IF `spalte` LIKE "" THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'spalte was empty';
END IF;
SET @test = `spalte` REGEXP '[A-Za-z]{4}';
IF NOT @test THEN
SIGNAL SQLSTATE '45001'
SET MESSAGE_TEXT = 'Spalte was to short (Minimum: 4 chars [A-Za-z])';
END IF;
END
$
CREATE TRIGGER `tabelle_before_insert` BEFORE INSERT ON `tabelle`
FOR EACH ROW
BEGIN
CALL check_tabelle(new.spalte);
END
$
CREATE TRIGGER `tabelle_before_update` BEFORE UPDATE ON `tabelle`
FOR EACH ROW
BEGIN
CALL check_tabelle(new.spalte);
END
$
DELIMITER ;
INSERT INTO `tabelle` ( spalte ) values ( "foobar" );
INSERT INTO `tabelle` ( spalte ) values ( "foo" );
INSERT INTO `tabelle` ( spalte ) values ( "" );
"foobar" : Query OK, 1 row affected (0,00 sec)
"foo" : ERROR 1644 (45001): Spalte was to short (Minimum: 4 chars [A-Za-z])
"" : ERROR 1644 (45000): spalte was empty
Das werde ich jetzt mal sorgfältig als Beispiel verwahren…