Здравствуйте, я довольно новичок в MySQL-запусках. Я хочу, чтобы получить результат из подготовленного запроса и не может видеть, как получить следующий код работы:Получить результат подготовленного запроса в MySQL Trigger?
BEGIN
DECLARE un_quer varchar(255);
DECLARE res integer;
IF(NEW.contact_id IS NULL) THEN
IF(NEW.name IS NULL OR NEW.email IS NULL) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Forbidden: ... information not sufficient.';
END IF;
END IF;
IF(NEW.name IS NULL OR NEW.email IS NULL) THEN
IF(NEW.contact_id IS NULL) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Forbidden: ... information not sufficient.';
END IF;
END IF;
SET un_quer = CONCAT('SELECT COUNT(*) FROM tender_tenderer WHERE tender_id=',NEW.tender_id);
IF(NEW.contact_id IS NULL) THEN
SET un_quer = CONCAT(un_quer,' AND contact_id IS NULL');
ELSE
SET un_quer = CONCAT(un_quer,' AND contact_id = ',NEW.contact_id);
END IF;
IF(NEW.name IS NULL) THEN
SET un_quer = CONCAT(un_quer,' AND name IS NULL');
ELSE
SET un_quer = CONCAT(un_quer,' AND name = "',NEW.name,'"');
END IF;
PREPARE stmt1 FROM un_quer;
SET res = (EXECUTE stmt1);
IF (0 < res) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Forbidden: ...';
END IF;
END
Я думаю, что большая часть кода работает, но строка «SET разреш = (ВЫПОЛНИТЬ stmt1);» производит ошибка. Как я могу выбрать результат stmt1 в переменную $ res, чтобы я мог использовать полученное целое число для сравнения в предложении IF?
ПРИМЕЧАНИЕ. Основная проблема заключается в том, что я хочу иметь «уникальное ограничение» в Mysql InnoDB, которое работает со значениями NULL.
Кстати, ваши первые два 'IF()' строго эквивалентны: o) – RandomSeed