Bases de Datos - Capturar error data to long en procedimiento

 
Vista:
sin imagen de perfil

Capturar error data to long en procedimiento

Publicado por Luis (2 intervenciones) el 19/05/2017 22:58:22
Hola gente del foro,
Me gustaría que me ayudaran con un problema que tengo actualmente para capturar el error de data too long en un procedimiento almacenado, a continuación se los muestro:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
CREATE PROCEDURE `P_CONSULTAR_COBERTURA`(
	IN PI_CODIGO VARCHAR(10),
	OUT CD_ERROR INT,
	OUT DE_ERROR VARCHAR(100)
        )
 
BEGIN
	DECLARE _countRow INT DEFAULT -1;
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		SET DE_ERROR = CONCAT('ERROR: ', MYSQL_ERRNO, ' - ', MESSAGE_TEXT);
		ROLLBACK;
	END;
	DECLARE EXIT HANDLER FOR SQLWARNING
	BEGIN
		SET DE_ERROR = CONCAT('ERROR: ', MYSQL_ERRNO, ' - ', MESSAGE_TEXT);
		ROLLBACK;
	END;
 
    IF LENGTH(PI_CODIGO) <= 10 && PI_CODIGO REGEXP '^[A-Z]{1,10}[^0-9]$' THEN
		START TRANSACTION;
		SELECT TX_TIPO, CODIGO, NOMBRE, ESTATUS
		FROM COBERTURA
		WHERE COIGO = PI_CODIGO;
 
		SET _countRow = FOUND_ROWS( );
		SET CD_ERROR = 0;
		SET DE_ERROR = CONCAT('Consulta exitosa');
        COMMIT;
    ELSE
		START TRANSACTION;
		SELECT TX_TIPO, CODIGO, NOMBRE, ESTATUS
		FROM COBERTURA;
 
        SET _countRow = FOUND_ROWS( );
		SET CD_ERROR = 0;
		SET DE_ERROR = CONCAT('Consulta exitosa');
        COMMIT;
	END IF;
 
 
    IF(_countRow < 1) THEN
		SET CD_ERROR = -1;
		SET DE_ERROR = CONCAT('Fallo la operacion');
    END IF;
END

Como pueden ver estoy manejando el control de errores a traves de handler pero cuando ingreso una longitud mayor a 10 caracteres en el parámetro de entrada el handler no actúa, sino que se sale de la ejecución del procedimiento donde al contrario debería mostrar un mensaje con el número y mensaje del error.

Agradezco su ayuda, muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder