#mysql #triggers
Вопрос:
Я пытаюсь добавить некоторые триггеры в свою базу данных и получаю эту ошибку : SQLSTATE[42000]: Синтаксическая ошибка или нарушение доступа: 1231 Переменная «MESSAGE_TEXT» не может быть установлена в значение «NULL»
Версия MySQL : 8.0.26
Вот пример триггера перед обновлением:
CREATE
DEFINER = 'admin'@'%'
TRIGGER db2.members_b_u
BEFORE UPDATE
ON db2.mymembers
FOR EACH ROW
begin
declare msg VARCHAR(200);
DECLARE userid1 INT;
if new.memberid IS null then
set msg = CONCAT('Error .: ', cast(new.userid as char));
SIGNAL sqlstate '45000' set message_text = msg;
end if;
if new.memberlevel <>'Π19' AND new.memberlevel <>'ΜΜ' AND new.memberlevel is not null AND new.city IS NULL then
set msg = CONCAT('Error : ', cast(new.am as char));
SIGNAL sqlstate '45000' set message_text = msg;
end if;
if LENGTH(new.postalcode1)<>5 AND new.city1 between '01' and '99' then
set msg = CONCAT('Error : ', cast(new.userid as char));
SIGNAL sqlstate '45000' set message_text = msg;
end if;
select userid into userid1 from mymembers where memberid=new.memberid AND userid!=NEW.userid;
set msg = CONCAT('Error : ', cast(userid1 as char));
SIGNAL sqlstate '45000' set message_text = msg;
END
Любая помощь будет признательна !
Ответ №1:
concat
возвращает null
, если есть какие-либо из его аргументов null
, что вполне может произойти здесь. Одним из способов защиты от этого было бы использование coalesce
. Например.:
set msg = CONCAT('Error .: ', COALESCE(cast(new.userid as char), 'Missing userid');