CREATE DEFINER=... . . . BEGIN DECLARE mensaje VARCHAR(50 (opcional)); DECLARE EXIT HANDLER FOR XXXX BEGIN SET mensaje ='El mensjaje del error que en el momento se este tratando'; SELECT mensaje; END; . . . RESTO DEL CODIGO END
CREATE DEFINER=... . . . BEGIN DECLARE mensaje VARCHAR(50 (opcional)); DECLARE EXIT HANDLER FOR XXXX BEGIN SET mensaje ='El mensjaje del error que en el momento se este tratando'; SELECT mensaje; END; . . . RESTO DEL CODIGO END
Hola Carmen, espero que este bien
Tu código tiene algunos errores de sintaxis. Aquí tienes una versión corregida y explicada:
CREATE DEFINER=... PROCEDURE nombre_procedimiento()
BEGIN
DECLARE mensaje VARCHAR(50); -- Declaración de la variable (corregido el paréntesis mal colocado)
-- Manejador de errores genérico
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SET mensaje = 'Se ha producido un error'; -- Mensaje de error
SELECT mensaje; -- Mostrar el mensaje
END;
-- RESTO DEL CÓDIGO
END;
Corrección de VARCHAR(50 (opcional))
VARCHAR(50 (opcional))
es incorrecto. Debe ser VARCHAR(50)
.Falta del nombre del procedimiento
CREATE DEFINER=...
debe ir seguido de PROCEDURE nombre_procedimiento()
para definir la función almacenada.Manejador de errores EXIT HANDLER FOR XXXX
SQLEXCEPTION
. DECLARE EXIT HANDLER FOR 1062 -- Error de clave duplicada
DECLARE EXIT HANDLER FOR 1049 -- Base de datos desconocida
Corrección del mensaje de error
mensaje
se usa para almacenar un mensaje genérico o personalizado.GET DIAGNOSTICS
Si quieres capturar el mensaje exacto del error, puedes hacer algo como esto (MySQL 5.6+):
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1 @error_message = MESSAGE_TEXT;
SELECT @error_message AS mensaje;
END;
Si quieres un control de errores más específico, dime qué necesitas y te ayudo a adaptarlo.