Я считаю, что в MySQL нет ничего доступного в MySQL, который позволяет получить доступ к SQLSTATE последнего исполняемого оператора в хранимой процедуре MySQL. Это означает, что при генерировании общего SQLException в хранимой процедуре трудно/невозможно получить точный характер ошибки.
Есть ли у кого-нибудь обходной путь для получения SQLSTATE ошибки в хранимой процедуре MySQL, которая не включает объявление обработчика для всех возможных SQLSTATE?
Например, представьте, что я пытаюсь вернуть error_status, который выходит за рамки общего "SQLException, произошедшего где-то в этом блоке BEGIN....END
", в следующем:
DELIMITER $$
CREATE PROCEDURE `myProcedure`(OUT o_error_status varchar(50))
MY_BLOCK: BEGIN
DECLARE EXIT handler for 1062 set o_error_status := "Duplicate entry in table";
DECLARE EXIT handler for 1048 set o_error_status := "Trying to populate a non-null column with null value";
-- declare handlers ad nauseum here....
DECLARE EXIT handler for sqlexception set o_error_status:= "Generic SQLException. You'll just have to figure out the SQLSTATE yourself...." ;
-- Procedure logic that might error to follow here...
END MY_BLOCK$$
Любые советы?
PS Я запускаю MySQL 5.1.49