Creo que no hay nada actualmente disponible en MySQL que permita el acceso al SQLSTATE de la última instrucción ejecutada dentro de un procedimiento almacenado de MySQL. Esto significa que cuando se genera una SQLException genérica dentro de un procedimiento almacenado, es difícil/imposible derivar la naturaleza exacta del error.MySQL Stored Procedure Error Handling
¿Alguien tiene una solución para derivar el SQLSTATE de un error en un procedimiento almacenado de MySQL que no implica declarar un controlador para cada SQLSTATE posible?
Por ejemplo - Imagino que estoy tratando de devolver un error_status que va más allá de la "excepción de SQL sucedido en alguna parte de este bloque BEGIN....END
" genérica en lo siguiente:
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$$
Algún consejo?
PS Estoy corriendo MySQL 5.1.49
Gracias! Realmente util. Todo lo que tengo que hacer ahora es actualizar a 5.6 ;-) –