2013-11-26 3 views
0

Я пытаюсь настроить триггер (из отдельного .sql файла), чтобы предотвратить вставку, как это:MySQL странные ошибки запуска

create trigger insert_formulas before insert on formulas  
for each row 
    if ((new.formula_id_1 is not null) and (new.semantic_id_1 is not null)) 
    or ((new.formula_id_2 is not null) and (new.semantic_id_2 is not null)) 
    then 
     signal sqlstate '45100'; 
     set @message_text = 'A formula cannot be a definition at the same time'; 
    end if; 

Он выдает ошибку 1064 около «» в строке 6 и около «конец if» в строке 1. Что я сделал неправильно?

Заранее спасибо.

+1

Где ваше объявление триггера? Пожалуйста, укажите полный фактический код –

+0

Ах да, я забыл это сделать. – alexdelphi

ответ

0

Имеет ли 9.4. User-Defined Variables@message_text отличное от MESSAGE_TEXT в определении 13.6.7.5. SIGNAL Syntax?

Следующий код создает триггер правильно:

DELIMITER $$ 

CREATE TRIGGER `insert_formulas` BEFORE INSERT ON `formulas` 
FOR EACH ROW 
BEGIN 
    IF((NEW.`formula_id_1` IS NOT NULL AND NEW.`semantic_id_1` IS NOT NULL) OR 
     (NEW.`formula_id_2` IS NOT NULL AND NEW.`semantic_id_2` IS NOT NULL)) THEN 
     SIGNAL SQLSTATE '45100' 
     SET MESSAGE_TEXT = 'A formula cannot be a definition at the same time'; 
    END IF; 
END$$ 

DELIMITER ; 

Здесь SQL Fiddle.

Смежные вопросы