Вы не можете поймать сообщение, но вы можете поймать код ошибки.
Вот пример работы с «Дубликатом» (PK, ограничение Великобритании):
CREATE PROCEDURE sp_do_insert(
IN in_param1 int,
IN in_param2 int,
OUT out_status tinyint
)
BEGIN
DECLARE CONTINUE HANDLER FOR 1062 SET out_status = 1;
SET out_status = 0;
INSERT INTO tbl(field1, fiel2)
VALUES (in_param1, in_param2);
END;
Если tbl
имеет ограничение UK для поля field1, и вы попытаетесь вставить существующее значение еще раз, вы не получите ошибку. Ничего не будет вставлено, и статус будет равен 1.
Вы также можете добавить еще один обработчик для других кодов ошибок. И вы всегда будете знать, что является ошибкой из-за значения out_status, и вы будете знать «сообщение об ошибке» из-за error_code (в обработчике).
Вы можете попробовать поиграть с show warnings
(показывает ошибки / предупреждения для последнего запроса) в случае, если out_status <> 0
.
Надеюсь, это поможет.