try stored sqlstate signal not handling found error code catch mysql exception-handling signals

stored - Excepción de acceso al manejador de excepciones MySQL manejado



sqlstate mysql (1)

Parece que RESIGNAL es lo que estás buscando.

RESIGNAL permite manejar un error y devolver la información del error. De lo contrario, al ejecutar una instrucción SQL dentro del controlador, se destruye la información que provocó la activación del controlador. RESIGNAL también puede RESIGNAL algunos procedimientos si un manejador determinado puede manejar parte de una situación, luego pasar la condición "arriba de la línea" a otro manejador.

DELIMITER $$ DROP PROCEDURE IF EXISTS `test`.`resig` $$ CREATE PROCEDURE `test`.`resig` () BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN SELECT ''I executed something before throwing the error'' as `this_works`; RESIGNAL; END; SELECT foo FROM bar WHERE baz = 0; END $$ DELIMITER ; mysql> call resig(); +------------------------------------------------+ | this_works | +------------------------------------------------+ | I executed something before throwing the error | +------------------------------------------------+ 1 row in set (0.00 sec) ERROR 1054 (42S22): Unknown column ''foo'' in ''field list'' mysql>

Estoy intentando deshacer un error, pero aún así dejo que el cliente reciba el error . En realidad, esto podría ser imposible, a menos que haya una forma de acceder al error en un manejador de excepciones.

Es posible "lanzar" desde una excepción, es decir, es posible generar una señal :

CREATE PROCEDURE p () BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN SIGNAL SQLSTATE VALUE ''99999'' SET MESSAGE_TEXT = ''An error occurred''; END; DROP TABLE no_such_table; END;

Pero este código de muestra del documento de MySQL parece horrible , porque literalmente se traga todos los errores y los atasca en uno.

SHOW ERRORS parece relevante, pero no veo ninguna forma de trabajar con él programáticamente, por ejemplo, SELECT Code FROM (SHOW ERRORS); no es posible.

es posible? ¿Hay alguna mejor práctica que me falta por completo?